Asp.net web api owin cors或web api cors

Asp.net web api owin cors或web api cors,asp.net-web-api,oauth,cors,owin,Asp.net Web Api,Oauth,Cors,Owin,关于web api上的CORS有100个问题,关于如何启用CORS,每个问题都有不同的答案。我很困惑,不知道哪个答案是正确的。问题是,没有一个答案能准确地解释每行代码的作用,这样我就可以理解并解决我的问题,而不是复制粘贴代码 无论如何,问题是:我使用的是使用owin的asp.NETWebAPI2。我需要启用CORS。我该怎么做?OWIN有cors设置 application.UseCors(CorsOptions.AllowAll); 还有asp.net web api的cors设置

关于web api上的CORS有100个问题,关于如何启用CORS,每个问题都有不同的答案。我很困惑,不知道哪个答案是正确的。问题是,没有一个答案能准确地解释每行代码的作用,这样我就可以理解并解决我的问题,而不是复制粘贴代码

无论如何,问题是:我使用的是使用owin的asp.NETWebAPI2。我需要启用CORS。我该怎么做?OWIN有cors设置

  application.UseCors(CorsOptions.AllowAll);
还有asp.net web api的cors设置

   var cors = new EnableCorsAttribute("*", "*", "*", "*");
   config.EnableCors(cors);
如果我没有使用OAUTH,我应该使用哪一个(我之所以指定这一点,是因为当我们不使用OAUTH v/s时,在使用OAUTH v/s时,答案是不同的)

我是否需要为OWIN和WEB-API启用CORS,还是只为其中一个启用CORS。如果两者都启用,则会出现问题

如果有人能给我解释一下两者之间的区别,那将非常有帮助

  • 奥文科尔斯酒店
  • WEB API CORS
  • 使用OWIN/WEBAPI的带有OAUTH的CORS

  • 此外,对于自托管web api和owin托管web api,也有一些答案,这进一步增加了混淆:(,很抱歉,如果您需要将CORS应用于api控制器,您应该使用
    web api的CORS
    。对于其他一切(如令牌服务),您必须使用
    owin.CORS

    如果您最终都使用了这两种方法,则需要确保它们不会重叠,并对同一请求应用CORS两次

    webapi 2.2
    通过提供
    EnableCorsAttribute
    使启用CORS变得容易

    基本用法

    [EnableCors("*", "*", "*")]
    public class ResourcesController : ApiController
    {
        ...
    
    属性定义

    [AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method, AllowMultiple = false)]
    public EnableCorsAttribute(
        string origins,
        string headers,
        string methods
    )
    
    要在全局范围内启用CORS,请使用

    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            var cors = new EnableCorsAttribute("www.example.com", "*", "*");
            config.EnableCors(cors);
            // ...
        }
    }
    
    您还需要从nuget安装CORS包

    Install-Package Microsoft.AspNet.WebApi.Cors
    

    有一种方法可以解决此问题。因为OWIN和ASP.NET.CORS库同时工作。需要将OWIN令牌或身份验证方法配置为与所有其他API控制器分开启用CORS

    首先,不要在Startup.cs中将cors与Owin一起使用:

    public void Configuration(IAppBuilder app)
    {
        //app.UseCors(CorsOptions.AllowAll);
    
    查找GrantResourceOwnerCredentials方法并将Access Control Allow Origin添加到上下文中,以便在身份验证完成后返回调用时,浏览器找到标头并接受它

    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
            context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "http://localhost" });
    
    现在将Microsoft.AspNet.WebApi.Cors包从Nuget安装到WebApi项目中,并将其添加到Register方法中

    public static void Register(HttpConfiguration config)
    {
            var cors = new EnableCorsAttribute("http://localhost, ", "accept,accesstoken,authorization,cache-control,pragma,content-type,origin", "GET,PUT,POST,DELETE,TRACE,HEAD,OPTIONS");
    
            config.EnableCors(cors);
    

    为我工作。

    我知道如何在web api上启用cors,我想知道的是web api和owin cors之间的区别,什么时候使用。这不是关于如何/在哪里启用它…web api的cors只支持控制器,对于您需要使用owin.cors的所有其他内容。
    其他所有内容
    安全令牌服务就是一个例子le.那不在控制之下。为什么不呢?它回答了问题并提供了一些额外的信息。同意,如果有人有一个不含糊的解释,肯定会很棒。我仍在寻找答案。给出的答案不完整,也不中肯。我不想问怎么做,那就是还有那么多其他答案。谢谢这也解决了我的问题,这个问题的原因确实是OWIN。谢谢