CORS 已启用,但仍会收到 405

Posted

技术标签:

【中文标题】CORS 已启用,但仍会收到 405【英文标题】:CORS is enabled but still get 405 【发布时间】:2018-01-04 21:20:57 【问题描述】:

我正在编写一个快速而肮脏的小脚本来记录静态 html 页面上的流量。我正在向托管 API 的另一台服务器进行 POST。服务器启用了 CORS(请参见下面的代码),但我仍然得到 405。

    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="*" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, PATCH, DELETE, OPTIONS" />

这是我的 javascript

  var host = window.location.host;
  var hostname = window.location.hostname;
  var href = window.location.href;
  var port = window.location.port;
  var path = window.location.pathname;
  var referrer = document.referrer;

  var obj =  
    Host: host,
    HostName: hostname,
    Href: href,
    Port: port,
    Path: path,
    Referrer: referrer
  ;

  $.ajax(
    type: 'POST',
    url: 'http://localhost/system/api/sp/logvisit',
    data: obj,
    dataType: 'json',
    contentType: 'application/json'
  );

这是我的控制器:

namespace Gs.Api

    public class SPController : ApiController
    
        [Route("api/sp/logvisit")]
        [HttpPost]
        public void LogVisit(LogVisitRequest request)
        
            // do stuff with request
        
    

我在这里尝试了主要答案Handling CORS Preflight requests to ASP.NET MVC actions,它摆脱了 405,但我的方法实际上从未被调用过。我在这里尝试了各种答案的其他几种修复方法,有些解决了错误,但我发布的对象将为空。

【问题讨论】:

验证是否可以从同源调用方法。 @11thdimension 方法使用 ARC(高级 REST 客户端 - 来自 Chrome App Store)工作正常 REST 客户端不受 CORS 约束,请尝试使用 Ajax。 @11thdimension 它出现 500 错误,但我更改为 JSON.stringify(obj) 并且它在我的本地工作。如果我将 [HttpOptions] 添加到调用中,则会出现 500 错误,因为请求为空。 @11thdimension 我想通了。一旦我把它全部输入,很快就会发布答案。感谢您的帮助! 【参考方案1】:

这是我自己想出来的。我不得不采取其他一些解决方案并将它们一起使用,但我最终得到了它。

    我使用了这个答案:https://***.com/a/13646169/3920075 我把&lt;add name="Access-Control-Allow-Headers" value="*" /&gt;改成了&lt;add name="Access-Control-Allow-Headers" value="Content-Type" /&gt;。 我把data: obj改成了data: JSON.stringify(obj)

【讨论】:

以上是关于CORS 已启用,但仍会收到 405的主要内容,如果未能解决你的问题,请参考以下文章

CORS 已启用,但 toDataURL 仍会引发警告

Cors 中启用的所有标头,WebConfig 和 WebApiConfig 之间没有冲突,为啥我的 WebApi 返回 405 错误?

即使启用了CORS,Web Api仍会始终发生403错误

Spring CorsFilter 似乎无法正常工作,但仍会收到 401 的预检请求

在 asp net core web api v3.0 中启用 CORS 的问题

已启用 CORS,但在 POST JSON 时,预检响应的 HTTP 状态代码 404 无效