使用WebApi v1启用CORS

威尔·洛佩兹(Will Lopez)

过去,我可以使用控制器中的以下代码来克服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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Java中使用stream()将Map <v1,Set <v2 >>转换为Map <v2,Set <v1 >>

如何在ASP.net Core WebAPI中启用CORS

Asp.Net WebApi2启用CORS无法与AspNet.WebApi.Cors 5.2.3一起使用

如何使用Docker v1存储库

Google Cloud Logging:是否使用V2 API搜索v1条目?

WebAPI-为子域启用CORS

每页使用ionic v1和angularjs的奇怪点

AWS API Gateway应禁止使用TLS v1

如何使用MenuItem导航?材质用户界面V1

使用jq将JSON {“ k1”:“ v1”,“ k2”:“ v2”}转换为CSV:v1,v2

如何在Ionic V1中使用FCM

使用angularjs在ionic v1中使用querystring

使用GCloud Emulator的Google Cloud PubSub V1

如何绕过(不建议使用)reCAPTCHA V1?

为使用Cloud Endpoints v1的Cloud Run启用CORS

通过WebAPI PUT / POST请求启用CORS?

获取“全部”的通用Web API路由-WebAPI v1

Google Map无法在设备上使用api v1

如何在/ api / v1上实现版本化的WebApi

是否可以使用Google Maps v1?

使用Meltdown和Spectre v1 / v2可以访问哪个内存?

如何使用离子(v1)框架呈现弹出viewController?

从 Android 客户端使用时,我应该(不是如何)在 WebApi 中启用 CORS

即使启用了 CORS,WebApi 也会始终抛出 403 错误

为 Azure Rest webapi 应用程序启用 CORS

auth0 try button linkedin 正在使用 v1:此资源在 v1 API 下不再可用

在 .net core webAPI 中启用 CORS

版本控制 WebAPI C# - 通過模型類對 v1 和 v2 的不同響應

无法使用更新代码在 tensorflow V2 中加载 Tensorflow v1 模型?