Новый бот-фреймворк 403 Forbidden (.NET Core 2.1) - PullRequest
0 голосов
/ 12 января 2019

У меня в Azure Регистрация ботовых каналов с AppId и AppPass enter image description here

Я развернул бота из Visual Studio в службе приложений и добавил MicrosoftAppId и MicrosoftAppPassword enter image description here

Я пытаюсь проверить в "Тест в веб-чате" enter image description here

И есть 403 Запрещено enter image description here

С клиентом Telegram у меня та же ошибка Ошибка POST to xxx: ошибка POST для конечной точки бота с состоянием HTTP 403

В "Журнальном потоке" я вижу enter image description here

Startup.cs

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddBot<IAssistantBot>(options =>
        {
           var secretKey = Configuration.GetSection("botFileSecret")?.Value;

            // Loads .bot configuration file and adds a singleton that your Bot can access through dependency injection.
            var botConfig = BotConfiguration.Load(@".\IAssistant.Bot.bot", secretKey);
            services.AddSingleton(sp => botConfig);

            // Retrieve current endpoint.
            var service = botConfig.Services.Where(s => s.Type == "endpoint" && s.Name == "development").FirstOrDefault();
            if (!(service is EndpointService endpointService))
            {
               throw new InvalidOperationException($"The .bot file does not contain a development endpoint.");
            }

           options.CredentialProvider = new SimpleCredentialProvider(endpointService.AppId, endpointService.AppPassword);

            // Catches any errors that occur during a conversation turn and logs them.
            options.OnTurnError = async (context, exception) =>
           {
               await context.SendActivityAsync("Sorry, it looks like something went wrong.");
           };
       });
    }

Какова причина?

1 Ответ

0 голосов
/ 13 января 2019

Хорошо, так что добро пожаловать в V4 и .bot файлы ! Вы (правильно) показывали нам скриншоты ваших секретов, которые были правильно настроены с помощью параметров приложения, но ваш загрузочный код не полагается на параметры приложения ... вместо этого он использует новый файл .bot для загрузки учетных данных для конечной точки.

Позвольте мне начать с того, что это совершенно новая дополнительная технология. Я знаю, что примеры, как правило, отражают это в вашем лице, но вам не нужно принимать его, если у вас уже есть практики DevOps, которые отлично работают для поддержки и развертывания ваших ключей / секретов с помощью существующих механизмов, таких как переменные среды / настройки приложения.

Например, вы можете вырезать файл .bot и изменить свой запуск, чтобы использовать настройки приложения, просто изменив регистрацию своего бота на:

public class Startup
{
    private readonly IConfiguration _configuration;

    public Startup(IConfiguration configuration)
    {
        // Ask for the configuration service to be injected so you can access config values (standard .NET Core 101 stuff)
        _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddBot<IAssistantBot>(options =>
        {
            // Load the values right out of configuration
            options.CredentialProvider = new SimpleCredentialProvider(
               _configuration.GetSection("MicrosoftAppId").Value,
               _configuration.GetSection("MicrosoftAppPassword").Value);

            // Catches any errors that occur during a conversation turn and logs them.
            options.OnTurnError = async (context, exception) =>
           {
               await context.SendActivityAsync("Sorry, it looks like something went wrong.");
           };
       });
    }
}

Как видите, кода для начала гораздо меньше, и он просто использует существующую систему конфигурации, предоставляемую .NET Core. Вы можете загружать его из файла appsettings.json, переменных среды, любых других хранилищ конфигурации, которые вы могли бы использовать в .NET Core.

...