Web API 2 CORS IIS Express调试和无Access-Control-Allow-Origin标头

时间:2016-07-19 23:38:32

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

清空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");
    }
}

调试应用并加载fiddler并向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"))

1 个答案:

答案 0 :(得分:4)

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

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

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

Request and Response Headers