Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Configuration 禁止使用新的Bot框架403(.NET Core 2.1)_Configuration_Botframework_Credentials - Fatal编程技术网

Configuration 禁止使用新的Bot框架403(.NET Core 2.1)

Configuration 禁止使用新的Bot框架403(.NET Core 2.1),configuration,botframework,credentials,Configuration,Botframework,Credentials,我在Azure a机器人频道注册了AppId和AppPass 我已将一个机器人从Visual Studio部署到应用程序服务,并添加了MicrosoftAppId和MicrosoftAppPassword 我在“网络聊天测试”中尝试测试 并有一个403禁止 对于电报客户端,我也有同样的错误 发送到xxx失败:发送到bot的端点失败,HTTP状态为403 在“日志流”中,我看到 Startup.cs public void配置服务(IServiceCollection服务) { serv

我在Azure a机器人频道注册了AppId和AppPass

我已将一个机器人从Visual Studio部署到应用程序服务,并添加了MicrosoftAppIdMicrosoftAppPassword

我在“网络聊天测试”中尝试测试

并有一个403禁止

对于电报客户端,我也有同样的错误 发送到xxx失败:发送到bot的端点失败,HTTP状态为403

在“日志流”中,我看到

Startup.cs

public void配置服务(IServiceCollection服务)
{
services.AddBot(选项=>
{
var secretKey=Configuration.GetSection(“botFileSecret”)?.Value;
//加载.bot配置文件并添加您的bot可以通过依赖项注入访问的单例。
var botConfig=BotConfiguration.Load(@“\iasistant.Bot.Bot”,secretKey);
AddSingleton(sp=>botConfig);
//检索当前端点。
var service=botConfig.Services.Where(s=>s.Type==“endpoint”&&s.Name==“development”).FirstOrDefault();
如果(!(服务是EndpointService EndpointService))
{
抛出新的InvalidOperationException($“该.bot文件不包含开发终结点。”);
}
options.CredentialProvider=新的SimpleCredentialProvider(endpointService.AppId,endpointService.AppPassword);
//捕获会话回合中发生的任何错误并记录它们。
options.OnTurnError=异步(上下文,异常)=>
{
wait context.SendActivityAsync(“抱歉,看起来好像出了问题。”);
};
});
}
原因是什么?

好的,欢迎来到V4和!您(正确地)向我们显示了通过应用程序设置正确配置您的机密的屏幕截图,但您的启动代码不依赖于应用程序设置。。。相反,它使用新的
.bot
文件加载端点的凭据

首先让我说这是一项全新的可选技术。我知道这些示例往往会把它推到你面前,但如果你已经有了DevOps实践,可以通过环境变量/应用程序设置等现有机制很好地维护和部署你的密钥/机密,那么你就不必采用它

例如,您可以将
.bot
文件剪切掉,只需将您的bot注册更改为以下内容,即可将启动更改为使用应用程序设置:

公共类启动
{
专用只读IConfiguration\u配置;
公共启动(IConfiguration配置)
{
//要求注入配置服务,以便可以访问配置值(标准的.NETCore101内容)
_配置=配置??抛出新ArgumentNullException(nameof(配置));
}
public void配置服务(IServiceCollection服务)
{
services.AddBot(选项=>
{
//从配置中直接加载值
options.CredentialProvider=新的SimpleCredentialProvider(
_configuration.GetSection(“MicrosoftAppId”).Value,
_配置.GetSection(“MicrosoftAppPassword”).Value);
//捕获会话回合中发生的任何错误并记录它们。
options.OnTurnError=异步(上下文,异常)=>
{
wait context.SendActivityAsync(“抱歉,看起来好像出了问题。”);
};
});
}
}
正如您所看到的,对于初学者来说,它的代码要少得多,并且只利用了.NETCore提供的现有配置系统。您可以从appsettings.json文件、环境变量以及在.NET Core中使用的任何其他配置存储中加载它。

好的,欢迎使用V4和!您(正确地)向我们显示了通过应用程序设置正确配置您的机密的屏幕截图,但您的启动代码不依赖于应用程序设置。。。相反,它使用新的
.bot
文件加载端点的凭据

首先让我说这是一项全新的可选技术。我知道这些示例往往会把它推到你面前,但如果你已经有了DevOps实践,可以通过环境变量/应用程序设置等现有机制很好地维护和部署你的密钥/机密,那么你就不必采用它

例如,您可以将
.bot
文件剪切掉,只需将您的bot注册更改为以下内容,即可将启动更改为使用应用程序设置:

公共类启动
{
专用只读IConfiguration\u配置;
公共启动(IConfiguration配置)
{
//要求注入配置服务,以便可以访问配置值(标准的.NETCore101内容)
_配置=配置??抛出新ArgumentNullException(nameof(配置));
}
public void配置服务(IServiceCollection服务)
{
services.AddBot(选项=>
{
//从配置中直接加载值
options.CredentialProvider=新的SimpleCredentialProvider(
_configuration.GetSection(“MicrosoftAppId”).Value,
_配置.GetSection(“MicrosoftAppPassword”).Value);
//捕获会话回合中发生的任何错误并记录它们。
options.OnTurnError=异步(上下文,异常)=>
{
wait context.SendActivityAsync(“抱歉,看起来好像出了问题。”);
};
});
}
}
正如您所看到的,对于初学者来说,它的代码要少得多,并且只利用了.NETCore提供的现有配置系统。您可以从appsettings.json文件、环境变量或任何其他配置存储中加载它