2017-07-28 51 views
1

我正在編寫一個快速而髒的小腳本來記錄靜態HTML頁面上的流量。我正在向另一個託管API的服務器發送POST消息。服務器已啓用CORS(見下面的代碼),但我仍然獲得了405CORS已啓用,但仍可獲得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,但我的方法從來沒有真正被調用。我從這裏的各種答案嘗試了幾個其他修復,一些擺脫了錯誤,但我發佈的對象將爲空。

+0

驗證您可以調用來自同一產地的方法。 – 11thdimension

+0

@ 11thdimension使用ARC(高級REST客戶端 - 來自Chrome App Store)的工作正常 – Timothy

+0

REST客戶端不受CORS的約束,請嘗試使用Ajax。 – 11thdimension

回答

1

我想出了我自己的想法。我不得不採取一些其他解決方案並將它們一起使用,但我終於得到了它。

  1. 我用這樣的回答:https://stackoverflow.com/a/13646169/3920075
  2. 我改變<add name="Access-Control-Allow-Headers" value="*" /><add name="Access-Control-Allow-Headers" value="Content-Type" />
  3. 我改變data: obj,以data: JSON.stringify(obj)
相關問題