我正在编写一个快速而肮脏的小脚本来记录静态 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'
});
这是我的 Controller :
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 但我的方法实际上从未被调用过。我在这里尝试了各种答案的其他几个修复,有些修复了错误,但我发布的对象将为空。
最佳答案
这是我自己想出来的。我不得不采取其他一些解决方案并将它们一起使用,但我终于明白了。
- 我使用了这个答案:https://stackoverflow.com/a/13646169/3920075
- 我改变了
<add name="Access-Control-Allow-Headers" value="*" />
至<add name="Access-Control-Allow-Headers" value="Content-Type" />
. - 我改变了
data: obj
, 至data: JSON.stringify(obj)
关于javascript - 启用了 CORS 但仍然得到 405,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45379696/