dev*_*ull 1 cors iis-express asp.net-web-api iis-10
空的web.api项目,安装Microsoft.aspnet.webapi.cors 5.2.3,添加
config.EnableCors();
Run Code Online (Sandbox Code Playgroud)
到webapiconfig。使控制器和动作
public class HomeController : ApiController
{
[EnableCors("*" , "*" , "*")]
public async Task<string> Get()
{
return await Task.FromResult("omg");
}
}
Run Code Online (Sandbox Code Playgroud)
调试应用程序并加载提琴手,并向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>
Run Code Online (Sandbox Code Playgroud)
我想念什么?为什么这不会在对Get方法的所有请求中插入Access-Control-Allow-Origin标头?
同样,在web.config中定义CORS的答案也不是答案。在某些时候,我将需要添加原始检查,甚至可能需要检查HTTP方法,例如:
if(requestContext.HttpMethod == "POST" && (origin == "https://someplace.com" || origin == "http://localhost"))
Run Code Online (Sandbox Code Playgroud)
您所做的足以启用CORS,也可以使用以下代码在所有控制器上启用CORS:
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
Run Code Online (Sandbox Code Playgroud)
我不确定您如何测试它,但请注意,只有请求包含Origin标头后,它才会Access-Control-Allow-Origin以响应形式返回标头。如果您在请求中省略了原始标头,则响应将不包含Access-Control-Allow-Origin。
| 归档时间: |
|
| 查看次数: |
4359 次 |
| 最近记录: |