过去,我可以使用控制器中的以下代码来克服WebApi v1中的CORS限制。我没有升级到WebApi 2的选项,并且如果可能的话,不希望使用其他库。
用于注释控制器的类:
public class AllowCrossSiteJsonAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
if (actionExecutedContext.Response != null)
actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");
base.OnActionExecuted(actionExecutedContext);
}
}
//annotated controller
[AllowCrossSiteJson]
public class UserController : ApiController
{
现在这不起作用,因此我按照其他stackoverflow帖子中的建议将以下内容添加到了web.config中
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
在通话过程中,我仍然收到OPTIONS 405错误。我可以看到预期的响应标头...:
Access-Control-Allow-Origin:*
我不确定还有什么尝试。
[更新]感谢@Samuels的建议,我得以解决我的问题。我现在走了幼稚的路线。这是一个“幼稚”的解决方案,因为它盲目地为所有请求(类型为OPTIONS)发送200状态。更好的解决方案是创建一个消息处理程序。这是那些有兴趣的人的快速解决方案。
[AcceptVerbs("OPTIONS")]
public HttpResponseMessage OPTIONS()
{
var response = new HttpResponseMessage();
response.StatusCode = HttpStatusCode.OK;
response.Headers.Add("Access-Control-Allow-Methods", "GET,POST,DELETE");
response.Headers.Add("Access-Control-Allow-Headers", "Content-Type");
return response;
}
您所做的所有更改都是在设置Access-Control-Allow-Origin
标题。这是CORS的一部分,但与OPTIONS
请求无关。标头所做的只是指示浏览器任何来源都可以向您的服务器发出请求并读取请求。您的应用程序必须显式处理该OPTIONS
请求。HTTP 405表明应用程序不处理该请求。一种简单的处理OPTIONS
请求的方法是仅返回HTTP 200响应。
[AcceptVerbs("OPTIONS")]
public HttpResponseMessage Options()
{
var resp = new HttpResponseMessage(HttpStatusCode.OK);
resp.Headers.Add("Access-Control-Allow-Origin", "*");
resp.Headers.Add("Access-Control-Allow-Methods", "GET,DELETE");
return resp;
}
有关控制器中的支持请求,请参阅本指南OPTIONS
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句