我将XMLHttpRequest发送到Rest API服务器,如下所示:
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错误。很可能因为请求没有Rest参数(认为没有合适的重载),即如下所示:
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);
答案 0 :(得分:1)
尝试添加可选参数
[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,或者在你的服务器代码中使用可选的params。
如果不是它可能是您的IIS配置,请参阅此处:http://www.asp.net/web-api/overview/testing-and-debugging/troubleshooting-http-405-errors-after-publishing-web-api-applications