2

空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"))
4

1 回答 1

5

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

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

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

请求和响应标头

于 2016-07-20T00:30:58.097 回答