C# Cors不适用于Asp.Net Web Api
我尝试了在stackoverflow和其他网站上找到的解决方案,但并没有解决我的问题 因此,我首先要做的是安装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
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中添加主机名有什么好运气吗?