【问题标题】:Web API 2 CORS IIS Express Debug and No Access-Control-Allow-Origin headerWeb API 2 CORS IIS Express 调试和无 Access-Control-Allow-Origin 标头
【发布时间】:2016-11-23 00:53:12
【问题描述】:

空web.api项目,安装Microsoft.aspnet.webapi.cors 5.2.3,添加

config.EnableCors();

到 webapiconfig。制作控制器和动作

public class HomeController : ApiController
{
    [EnableCors("*" , "*" , "*")]
    public async Task<string> Get()
    {
        return await Task.FromResult("omg");
    }
}

调试应用程序并加载提琴手并向http://localhost:61939/api/Home发出请求

不存在 CORS 标头。 web.config 包含:

<system.webServer>
<handlers>
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <remove name="OPTIONSVerbHandler" />
  <remove name="TRACEVerbHandler" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

我错过了什么?为什么这不会在对我的 Get 方法的所有请求中插入 Access-Control-Allow-Origin 标头?

在 web.config 中定义 CORS 的答案也不是答案......有时我需要添加源检查,甚至可能检查 HTTP 方法,例如:

if(requestContext.HttpMethod == "POST" && (origin == "https://someplace.com" || origin == "http://localhost"))

【问题讨论】:

    标签: asp.net-web-api cors iis-express iis-10


    【解决方案1】:

    您所做的足以启用 CORS,您还可以使用此代码在所有控制器上启用 CORS:

     var cors = new EnableCorsAttribute("*", "*", "*"); 
     config.EnableCors(cors); 
    

    我不确定您是如何测试它的,但请注意,只有在请求包含 Origin 标头后,它才会返回 Access-Control-Allow-Origin 标头作为响应。如果您在请求中省略了原始标头,则响应将不包含 Access-Control-Allow-Origin。

    【讨论】:

    • 我不太确定我是否遵循,我没有使用 owin (app.UseCors)
    • 对不起,我没有注意到它没有使用管道。我已经编辑了答案,再看看
    • 你完全正确,这就是我所缺少的,非常感谢!
    • 哇,@akazemis .. 你的回答帮助我解决了我的问题。我在 IIS Express 上使用了相同的案例 WebApi2,并且不仅仅在 Chrome 和 Firefox 中工作。我的问题是,在配置允许的来源(如localhost:xxxx ..)时,我最后有一个斜杠“/”。我自己很愚蠢,但它可能发生在每个人身上。希望这能帮助那些没有我所经历的挣扎的人:D祝你有美好的一天,再次感谢!
    猜你喜欢
    • 2016-05-13
    • 2017-11-24
    • 2015-03-05
    • 2018-09-19
    • 2014-12-15
    • 2019-06-19
    • 2019-02-07
    • 2016-05-13
    • 2016-11-02
    相关资源
    最近更新 更多