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

当与ASP.NET Web Api 2.0一起使用时,Microsoft.Owin.Cors中间件做什么?,cors,owin,asp.net-web-api2,Cors,Owin,Asp.net Web Api2,我有一个带有令牌身份验证的ASP.NET Web Api 2.0项目,所有工作主要按照本文进行: ,一点技术 但我很难理解Startup.cs中的这行代码到底做了什么: app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 这不会使Web Api将Access Control Allow Origin头添加到我的Api响应中,换句话说,它不会在我的Web Api中启用Cors(仍在尝试理解如何这样做)。它甚至没有将其添加到我的承载令牌身份

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

,一点技术

但我很难理解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中间件到底有什么用呢?因为我读到的关于WebAPI2.0和Cors的每一个地方都有这一行代码

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

出现:

感谢您关注我的教程

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

但是对于Authz服务器和端点
/token
这没有影响,这就是为什么我必须添加
context.OwinContext.Response.Headers.add(“访问控制允许源代码”,新[]{“*”})此端点不是API的一部分,也不是从
ApiController
类继承的


希望这能回答您的问题。

你好,Taiseer,谢谢您的回答!但是我的APIController中没有启用CORS。我必须将这一行添加到Startup.cs中,然后它才能工作:configuration.EnableCors(新的EnableCorsAttribute(“,”,“GET,POST”);你可以在这里看到其他人也有类似的问题:这很奇怪,如果你在阅读我的文章时没有遗漏任何内容,你会注意到我仅使用此LOC启用CORS。你是对的app.UseCors(Microsoft.Owin.CORS.CorsOptions.AllowAll)确实在Web Api上启用了CORS。我有一个web api的部署问题,它破坏了cors。谢谢你的回答和文章@TaiseerJoudeh感谢您的一篇精彩文章,感谢您花时间展示您添加的所有代码,而不是假设有人理解中间件。你的文章和解释帮助我更好地理解OAuth。