C# Cors不适用于Asp.Net Web Api

C# Cors不适用于Asp.Net Web Api,c#,asp.net-mvc-4,asp.net-web-api,cors,C#,Asp.net Mvc 4,Asp.net Web Api,Cors,我尝试了在stackoverflow和其他网站上找到的解决方案,但并没有解决我的问题 因此,我首先要做的是安装Owin.Cors包并删除AspNet.WebApi.Cors,以确保我只需要将Cors启用到我们的Web Api和OAuth。它可以在OAuth中工作,但不能在Web Api中工作。建议在进行任何配置之前首先初始化它,所以我这样做了,请参阅下面的代码 public void ConfigureAuth(IAppBuilder app) { app.UseCors(CorsOpt

我尝试了在stackoverflow和其他网站上找到的解决方案,但并没有解决我的问题

因此,我首先要做的是安装
Owin.Cors
包并删除
AspNet.WebApi.Cors
,以确保我只需要将Cors启用到我们的Web Api和OAuth。它可以在OAuth中工作,但不能在Web Api中工作。建议在进行任何配置之前首先初始化它,所以我这样做了,请参阅下面的代码

public void ConfigureAuth(IAppBuilder app)
{
    app.UseCors(CorsOptions.AllowAll);

    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        LoginPath = new PathString("/account/login"),
        Provider = new CookieAuthenticationProvider
        {
            // remove for brevity
        },
        ExpireTimeSpan = TimeSpan.FromMinutes(Settings.Instance.SessionExpiryTimeout)
    });

    DataProtectionProvider = app.GetDataProtectionProvider();

    app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

    app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
    {
        // remove content for brevity
    });

    app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}
当我请求检索令牌时,我得到以下信息:

"Access-Control-Allow-Origin": "*" 
"Access-Control-Allow-Credentials": "true"
然而,当我调用一个Api时,我假设响应头将包含上述内容,但它没有。因此导致异常:
对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许来源”标头。起源'https://localhost:44320因此,不允许访问。响应的HTTP状态代码为404。

我还尝试再次添加
AspNet.WebApi.Cors
,但这不起作用。是否因为我们的配置,我们正在使用Autofac。请参阅以下代码:

WebApiConfig

public class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        var cors = new EnableCorsAttribute("*", "*", "GET,POST");
        config.EnableCors(cors);

        config.SuppressDefaultHostAuthentication();
        config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

        var jsonpFormatter = new JsonpMediaTypeFormatter(config.Formatters.JsonFormatter);
        config.Formatters.Add(jsonpFormatter);

        config.Routes.MapHttpRoute(
            "ApiDefault",
            "api/{controller}/{id}",
            new {id = RouteParameter.Optional}
        );

    } 
}
public class DependencyConfig
{
    public static void Register()
    {
        var builder = new ContainerBuilder();

        builder.RegisterControllers(Assembly.GetExecutingAssembly());
        builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

        // omitted some codes

        var container = builder.Build();

        DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
    }
}
DependencyConfig

public class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        var cors = new EnableCorsAttribute("*", "*", "GET,POST");
        config.EnableCors(cors);

        config.SuppressDefaultHostAuthentication();
        config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

        var jsonpFormatter = new JsonpMediaTypeFormatter(config.Formatters.JsonFormatter);
        config.Formatters.Add(jsonpFormatter);

        config.Routes.MapHttpRoute(
            "ApiDefault",
            "api/{controller}/{id}",
            new {id = RouteParameter.Optional}
        );

    } 
}
public class DependencyConfig
{
    public static void Register()
    {
        var builder = new ContainerBuilder();

        builder.RegisterControllers(Assembly.GetExecutingAssembly());
        builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

        // omitted some codes

        var container = builder.Build();

        DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
    }
}
Global.asax

protected void Application_Start()
{
    XmlConfigurator.Configure();

    MvcHandler.DisableMvcResponseHeader = true;

    // omitted some codes

    WebApiConfig.Register(GlobalConfiguration.Configuration);

    // omitted some codes

    DependencyConfig.Register();
    JsonConfig.Configure();
}

知道是什么导致了这个问题吗?谢谢。

var cors=new EnableCorsAttribute(“*”、“*”、“GET、POST”);可能您应该添加选项动词,并且对于带有自定义标题的请求(或者用MDN术语,非简单请求)将发出飞行前请求。您可以使用此问题,您可以尝试无参数启用cors()吗在WebAPIConfig中没有启用Corsattribute,然后在操作级别或控制器级别启用它?@RohitGarg我尝试过,但没有成功。好的。它是哪个webapi版本?如果把主机名放在EnableCorsAttribute中有什么运气呢?var cors=new EnableCorsAttribute(“*”、“*”、“GET、POST”);可能您应该添加选项动词,并且对于带有自定义标题的请求(或者用MDN术语,非简单请求)将发出飞行前请求。您可以使用此问题,您可以尝试无参数启用cors()吗在WebAPIConfig中没有启用Corsattribute,然后在操作级别或控制器级别启用它?@RohitGarg我尝试过,但没有成功。好的。它是哪个webapi版本?在EnableCorsAttribute中添加主机名有什么好运气吗?