XMLHttpRequest格式错误URL-错误405

时间:2015-10-28 23:44:14

标签: javascript rest

我将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);

1 个答案:

答案 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