2015-10-28 44 views
0

我送XMLHttpRequest來REST API服務器這樣的:的XMLHttpRequest misformats URL-錯誤405

function sendPostRequest (accessToken) 
{ 
    // construct an HTTP request 
    var xhttp = new XMLHttpRequest(); 


    //build data 
    var data = {}; 
    data["accessToken"] = accessToken ; 

    xhttp.open("POST", "http://localhost:61103/api/Test", true); 
    xhttp.setRequestHeader('Content-Type', 'text/plain; charset=UTF-8'); 
    xhttp.send(JSON.stringify(data)); 

    xhttp.onloadend = function() { 

    }; 
} 

這是通過的ASP.NET Web API獲得:

[HttpPost] 
    public IHttpActionResult Post(string userToken) 
    { 
      //stuff 
    } 

但是,我總是回來405錯誤。很可能是因爲請求沒有休息的參數(覺得沒有合適的超載),即是這樣的:

POST http://localhost:61103/api/testAPI HTTP/1.1 
Host: localhost:61103 
Connection: keep-alive 
Content-Length: 21 
Origin: http://localhost:61103 
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36 
Content-Type: text/plain; charset=UTF-8 
Accept: */* 
Referer: http://localhost:61103/Testlogin.html 
Accept-Encoding: gzip, deflate 
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6 

{"accessToken":"asd"} 

通知,該數據不包括在該鏈接,而是在底部。

此外,該工作

xhttp.open("POST", "http://localhost:61103/api/Test?userToken=XXXX", true); 
+1

數據POST請求是如何工作的。 –

+2

狀態碼405表示「不允許的方法」。你可能不應該做一個POST請求,但一個GET請求。 –

+0

你使用的是什麼類型的服務器和後端語言? – rambossa

回答

0

嘗試增加

[HttpPost] 
public IHttpActionResult Post(string userToken = "") 
{ 
     // base code off of param 
} 

這是基於關閉ASP文件在這裏的一個可選的參數:http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection

例如,請考慮以下動作:

public void Get(int id)

id參數綁定到URI。因此,此操作只能與 字典或查詢字符串中的包含「id」值的URI相匹配,即 。

可選參數是一個例外,因爲它們是可選的。對於 可選參數,如果綁定無法從URI獲得值 ,那麼可以。

所以,我認爲你要麼編輯ajax url沒有價值,要麼在你的服務器代碼中使用可選參數。

如果它不是,它可能是你的IIS的配置,在這裏看到:http://www.asp.net/web-api/overview/testing-and-debugging/troubleshooting-http-405-errors-after-publishing-web-api-applications在請求的主體

+0

我不確定您的實際代碼是否以這種方式編寫,我只是根據您發佈的內容爲我的答案 – rambossa

+0

我得到404現在。該鏈接仍然沒有根據?userToken = XXX格式(順便說一句,手動使這樣的鏈接工作正常,即: xhttp.open(「POST」,「http:// localhost:61103/api/Test?userToken = XXX「,true); – user3599495

+0

所以使用那個URL你得到200? – rambossa