与ASP.NET Web Api 2.0一起使用时,Microsoft.Owin.Cors中间件究竟是什么?

时间:2014-11-12 13:45:57

标签: cors owin asp.net-web-api2

我有一个带有令牌身份验证的ASP.NET Web Api 2.0项目,所有工作都主要遵循本文:

Token Based Authentication using ASP.NET Web API 2, Owin, and Identity Bit Of Technology

但是我很难理解我的Startup.cs中的这行代码究竟是什么:

app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

这不会使Web Api将Access-Control-Allow-Origin标头添加到我的API响应中,换句话说,它不会在我的Web Api中启用Cors(仍然试图了解如何执行此操作) 。它甚至没有将它添加到我的承载令牌认证服务器响应中。我必须将此代码提供给我的OAuthAuthorizationServerProvider:

public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" }); 

在我的令牌提供商端点响应上启用Cors。

那么这个Microsoft.Owin.Cors中间件的用途是什么呢?因为每个地方我都读到了关于Web Api 2.0和Cors的这行代码

app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

出现:

1 个答案:

答案 0 :(得分:5)

感谢您关注我的教程。

此LOC app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);用于为API本身启用CORS(任何继承自ApiController的控制器)。

但是对于Authz服务器和终点/token,这没有任何影响,这就是为什么我要添加context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });这个终点不是API的一部分,不会继承自ApiController 1}} class。

希望这能回答你的问题。