首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >owin cors或web api cors

owin cors或web api cors
EN

Stack Overflow用户
提问于 2014-12-05 13:30:44
回答 2查看 6.2K关注 0票数 24

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

无论如何,问题是:我使用的是使用owin的asp.net web API2。我需要启用CORS。我该怎么做呢?存在用于所有权的cors设置

代码语言:javascript
复制
  application.UseCors(CorsOptions.AllowAll);

还有针对asp.net web api的cors设置

代码语言:javascript
复制
   var cors = new EnableCorsAttribute("*", "*", "*", "*");
   config.EnableCors(cors);

如果我没有使用OAUTH,我应该使用哪一个(我之所以指定这个,是因为当我们使用OAUTH v/s时,我们不使用它时,答案会有所不同)。

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

如果有人能给我解释一下

  1. OWIN CORS
  2. WEB API CORS
  3. CORS与OAUTH一起使用OWIN/WEBAPI

此外,也有关于自托管web api与owin托管web-api的答案,这进一步增加了混乱:(,很抱歉对此大加指责

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-09 03:18:23

有一种方法可以解决这个问题。因为OWIN和ASP.NET.CORS库同时工作。需要配置Owin令牌或身份验证方法,以便独立于所有其他API控制器启用CORS。

首先,不要在Startup.cs中使用cors和Owin:

代码语言:javascript
复制
public void Configuration(IAppBuilder app)
{
    //app.UseCors(CorsOptions.AllowAll);

找到GrantResourceOwnerCredentials方法并将Access-Control-Allow-Origin添加到上下文中,这样当它在身份验证完成后返回调用时,浏览器就会找到头部并接受它。

代码语言:javascript
复制
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方法中

代码语言:javascript
复制
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);

对我很管用。

票数 3
EN

Stack Overflow用户

发布于 2014-12-05 16:56:06

如果您需要将CORS应用于您的API控制器,则应该使用Web API's CORS。对于其他所有东西(比如令牌服务),您都必须使用Owin.Cors

如果最终两者都使用,则需要确保它们不会重叠,并对同一请求应用两次CORS。

通过提供EnableCorsAttributeWeb API 2.2可以轻松启用CORS。

基本用法

代码语言:javascript
复制
[EnableCors("*", "*", "*")]
public class ResourcesController : ApiController
{
    ...

属性定义

代码语言:javascript
复制
[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method, AllowMultiple = false)]
public EnableCorsAttribute(
    string origins,
    string headers,
    string methods
)

要全局启用CORS,请使用

代码语言:javascript
复制
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        var cors = new EnableCorsAttribute("www.example.com", "*", "*");
        config.EnableCors(cors);
        // ...
    }
}

您还需要从nuget安装CORS包

代码语言:javascript
复制
Install-Package Microsoft.AspNet.WebApi.Cors
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27309380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档