Resume:
创建一个类并继承ICredentialProvider类。
然后,将您的 Microsoft appId 和密码添加到字典中。
添加您的方法来检查它是否是有效的应用程序;还获得密码
你的申请。
将自定义身份验证添加到您的api/messages
控制器。
首先改变你的WebApiConfig
:
应该 :
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { action = RouteParameter.Optional, id = RouteParameter.Optional }
);
然后,您的自定义身份验证类,从 YourNameSpace 开始:
namespace YourNameSpace {
public class MultiCredentialProvider : ICredentialProvider
{
public Dictionary<string, string> Credentials = new Dictionary<string, string>
{
{ MicrosoftAppID1, MicrosoftAppPassword1},
{ MicrosoftAppID2, MicrosoftAppPassword2}
};
public Task<bool> IsValidAppIdAsync(string appId)
{
return Task.FromResult(this.Credentials.ContainsKey(appId));
}
public Task<string> GetAppPasswordAsync(string appId)
{
return Task.FromResult(this.Credentials.ContainsKey(appId) ? this.Credentials[appId] : null);
}
public Task<bool> IsAuthenticationDisabledAsync()
{
return Task.FromResult(!this.Credentials.Any());
}
}
之后,使用您的自定义添加控制器(api/消息)BotAuthentication
,加上你的静态构造函数来更新容器以使用正确的MicorosftAppCredentials
基于 BotAuthentication 设置的身份:
[BotAuthentication(CredentialProviderType = typeof(MultiCredentialProvider))]
public class MessagesController : ApiController
{
static MessagesController()
{
var builder = new ContainerBuilder();
builder.Register(c => ((ClaimsIdentity)HttpContext.Current.User.Identity).GetCredentialsFromClaims())
.AsSelf()
.InstancePerLifetimeScope();
builder.Update(Conversation.Container);
}
您现在可以通过以下方式处理消息:
[BotAuthentication(CredentialProviderType = typeof(MultiCredentialProvider))]
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
if (activity.Type == ActivityTypes.Message)
{
ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
Activity reply = activity.CreateReply("it Works!");
await connector.Conversations.ReplyToActivityAsync(reply);
}
}
这段代码已经过测试并且适用于我的机器人。
希望能帮助到你 :)