在web-api上的CORS上有100个问题,关于如何启用CORS,每个问题都有不同的答案。我很困惑,不知道哪一个答案是正确的。问题是,没有一个答案真正地解释了每一行代码的作用,这样我就可以理解和解决我的问题,而不是复制粘贴代码。
无论如何,问题是:我使用的是使用owin的asp.net web API2。我需要启用CORS。我该怎么做呢?存在用于所有权的cors设置
application.UseCors(CorsOptions.AllowAll);
还有针对asp.net web api的cors设置
var cors = new EnableCorsAttribute("*", "*", "*", "*");
config.EnableCors(cors);
如果我没有使用OAUTH,我应该使用哪一个(我之所以指定这个,是因为当我们使用OAUTH v/s时,我们不使用它时,答案会有所不同)。
我需要同时为OWIN和WEB-API启用CORS,还是只为其中之一启用CORS。如果两者都启用,则会出现问题,read here
如果有人能给我解释一下
此外,也有关于自托管web api与owin托管web-api的答案,这进一步增加了混乱:(,很抱歉对此大加指责
发布于 2016-09-09 03:18:23
有一种方法可以解决这个问题。因为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" });
现在将Nuget中的Microsoft.AspNet.WebApi.Cors包安装到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);
对我很管用。
发布于 2014-12-05 16:56:06
如果您需要将CORS应用于您的API控制器,则应该使用Web API's CORS
。对于其他所有东西(比如令牌服务),您都必须使用Owin.Cors
。
如果最终两者都使用,则需要确保它们不会重叠,并对同一请求应用两次CORS。
通过提供EnableCorsAttribute
,Web API 2.2
可以轻松启用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
https://stackoverflow.com/questions/27309380
复制相似问题