title: Cannot post activity. Unauthorize. Bot emulator error
body: <p>I have added these line of codes to my bot's <code>Startup.cs</code> in order for it to work in Azure's WebChat:</p>
  
  <pre><code>var appid = Configuration.GetSection("microsoftappid").Value;
  var apppassword = Configuration.GetSection("microsoftapppassword").Value;
  options.CredentialProvider = new SimpleCredentialProvider(appid, apppassword);
  </code></pre>
  
  <p>However, when I have these lines my bot does not work in Bot emulator. How can I integrate it with my bot so that I don't need to comment/uncomment the line of codes when publishing and opening my bot in the emulator. I am not that good yet in reading code so sorry for asking this. Thanks!</p>
  
  <pre><code>public class Startup
  {
      private ILoggerFactory _loggerFactory;
      private bool _isProduction = false;
  
      public Startup(IHostingEnvironment env)
      {
          _isProduction = env.IsProduction();
  
          var builder = new ConfigurationBuilder()
              .SetBasePath(env.ContentRootPath)
              .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
              .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
              .AddEnvironmentVariables();
  
          Configuration = builder.Build();
      }
  
      public IConfiguration Configuration { get; }
  
  
      public void ConfigureServices(IServiceCollection services)
      {
          var secretKey = Configuration.GetSection("botFileSecret")?.Value;
          var botFilePath = Configuration.GetSection("botFilePath")?.Value;
          if (!File.Exists(botFilePath))
          {
              throw new FileNotFoundException($"The .bot configuration file was not found. botFilePath: {botFilePath}");
          }
  
          BotConfiguration botConfig = null;
          try
          {
              botConfig = BotConfiguration.Load(botFilePath, secretKey);
          }
          catch
          {
              var msg = @"Error reading bot file. Please ensure you have valid botFilePath and botFileSecret set for your environment.
              - You can find the botFilePath and botFileSecret in the Azure App Service application settings.
              - If you are running this bot locally, consider adding a appsettings.json file with botFilePath and botFileSecret.
              - See https://aka.ms/about-bot-file to learn more about .bot file its use and bot configuration.
              ";
              throw new InvalidOperationException(msg);
          }
  
          services.AddSingleton(sp =&gt; botConfig ?? throw new InvalidOperationException($"The .bot configuration file could not be loaded. botFilePath: {botFilePath}"));
  
          var connectedServices = InitBotServices(botConfig);
          services.AddSingleton(sp =&gt; connectedServices);
  
          var environment = _isProduction ? "production" : "development";
          var service = botConfig.Services.FirstOrDefault(s =&gt; s.Type == "endpoint" &amp;&amp; s.Name == environment);
          if (service == null &amp;&amp; _isProduction)
          {
  
              service = botConfig.Services.Where(s =&gt; s.Type == "endpoint" &amp;&amp; s.Name == "development").FirstOrDefault();
          }
  
          if (!(service is EndpointService endpointService))
          {
              throw new InvalidOperationException($"The .bot file does not contain an endpoint with name '{environment}'.");
          }
  
          services.AddBot&lt;CoreBot&gt;(options =&gt;
          {
              options.CredentialProvider = new SimpleCredentialProvider(endpointService.AppId, endpointService.AppPassword);
              options.ChannelProvider = new ConfigurationChannelProvider(Configuration);
  
              var appid = Configuration.GetSection("microsoftappid").Value;
              var apppassword = Configuration.GetSection("microsoftapppassword").Value;
              options.CredentialProvider = new SimpleCredentialProvider(appid, apppassword);
  
              ILogger logger = _loggerFactory.CreateLogger&lt;CoreBot&gt;();
              options.OnTurnError = async (context, exception) =&gt;
              {
                  logger.LogError($"Exception caught : {exception}");
                  await context.SendActivityAsync($"Oops Sorry, it looks like something went wrong.");
              };
  
              IStorage dataStore = new MemoryStorage();
  
              var conversationState = new ConversationState(dataStore);
              options.State.Add(conversationState);
  
              var userState = new UserState(dataStore);
              options.State.Add(userState);
  
          });
  
          services.AddSingleton&lt;BasicAccessors&gt;(sp =&gt;
          {
              var options = sp.GetRequiredService&lt;IOptions&lt;BotFrameworkOptions&gt;&gt;().Value;
              if (options == null)
              {
                  throw new InvalidOperationException("BotFrameworkOptions must be configured prior to setting up the state accessors");
              }
  
              var conversationState = options.State.OfType&lt;ConversationState&gt;().FirstOrDefault();
              if (conversationState == null)
              {
                  throw new InvalidOperationException(
                      "ConversationState must be defined and added before adding conversation-scoped state accessors.");
              }
  
              var userState = options.State.OfType&lt;UserState&gt;().FirstOrDefault();
              if (userState == null)
              {
                  throw new InvalidOperationException(
                      "UserState must be defined and added before adding user-scoped state accessors.");
              }
  
              var accessors = new BasicAccessors(conversationState, userState)
              {
                  DialogStateAccessor = conversationState.CreateProperty&lt;DialogState&gt;(BasicAccessors.DialogStateAccessorName),
                  UserStateAccessor = userState.CreateProperty&lt;UserProfile&gt;(BasicAccessors.UserStateAccessorName),
                  ComplaintTicketAccessor = conversationState.CreateProperty&lt;ComplaintTicket&gt;(BasicAccessors.ComplaintTicketName),
              };
  
              return accessors;
          });
      }
  
      public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
      {
          _loggerFactory = loggerFactory;
  
          app.UseDefaultFiles()
              .UseStaticFiles()
              .UseBotFramework();
      }
  
      private static BotServices InitBotServices(BotConfiguration config)
      {
          var qnaServices = new Dictionary&lt;string, QnAMaker&gt;();
          var luisServices = new Dictionary&lt;string, LuisRecognizer&gt;();
  
          foreach (var service in config.Services)
          {
              switch (service.Type)
              {
                  case ServiceTypes.Luis:
                      {
                          if (!(service is LuisService luis))
                          {
                              throw new InvalidOperationException("The LUIS service is not configured correctly in your '.bot' file.");
                          }
  
                          var app = new LuisApplication(luis.AppId, luis.SubscriptionKey, luis.GetEndpoint());
                          var recognizer = new LuisRecognizer(app);
                          luisServices.Add(luis.Name, recognizer);
                          break;
                      }
  
                  case ServiceTypes.Dispatch:
  
                      if (!(service is DispatchService dispatch))
                      {
                          throw new InvalidOperationException("The Dispatch service is not configured correctly in your '.bot' file.");
                      }        
  
                      var dispatchApp = new LuisApplication(dispatch.AppId, dispatch.AuthoringKey, dispatch.GetEndpoint());
  
                      var dispatchARecognizer = new LuisRecognizer(dispatchApp);
                      luisServices.Add(dispatch.Name, dispatchARecognizer);
                      break;
  
                  case ServiceTypes.QnA:
                      {
  
                          if (!(service is QnAMakerService qna))
                          {
                              throw new InvalidOperationException("The QnA service is not configured correctly in your '.bot' file.");
                          }
  
                          var qnaEndpoint = new QnAMakerEndpoint()
                          {
                              KnowledgeBaseId = qna.KbId,
                              EndpointKey = qna.EndpointKey,
                              Host = qna.Hostname,
                          };
  
                          var qnaMaker = new QnAMaker(qnaEndpoint);
                          qnaServices.Add(qna.Name, qnaMaker);
  
                          break;
                      }
              }
          }
  
          return new BotServices(qnaServices, luisServices);
      }
  }
  </code></pre>
  
  <p>}</p>