我知道这已被问了一千次。但我找不到我的错误。我通过在没有参数的情况下对其进行测试来缩小范围,该参数有效,然后尝试各种各样的事喜欢,获取或发布,[FromBody]或不。等等 也许我应该只显示我的代码,或者我今天应该停下来,并庆祝它几乎是周末。
[HttpGet] // also tried post instead of get
public HttpResponseMessage Get(int id)
{
return Request.CreateResponse(HttpStatusCode.OK); // breakpoint set, not hit
}
我的Js代码:
var myObj = {};
myObj["id"] = parseInt(id);
var json = JSON.stringify(myObj);
alert(json); // display: { id = 2134 }, seems fine to me
$.ajax({
type: "GET", // also tried post
dataType: "json",
url: '/api/CheckPossible/Get',
data: json,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function () {
alert('success');
},
error: function () {
alert('failure');
}
});
我收到了很多不好的请求(400),我确实让它在没有参数的情况下工作。所以这不是路由问题。
修改
$.ajax({
type: "GET",
dataType: "json",
url: '/api/CheckPossible/Get/?id=1234', // also tried Get?id=1234
contentType: "application/json; charset=utf-8",
success: function () {
alert('success');
},
error: function () {
alert('failure');
}
});
没用。也许我也错过了其他的东西
答案 0 :(得分:1)
您无法将http消息正文传递给GET
方法,您必须在URL或标头中传递参数。对于web api,您应该在URL中传递它们,您可以将其作为查询字符串或URL的一部分来执行。
要使其与查询字符串一起使用,请将网址更改为
url: '/api/CheckPossible/?id=' + myObj["id"],
忽略data
,因为这对get
无效。
如果要将参数作为URL的一部分,请更改路由以包含它。我更喜欢Route属性用于灵活路由,您也可以更改全局路由方案。
[HttpGet] // also tried post instead of get
[Route("api/CheckPossible/{id:int}"]
public HttpResponseMessage Get(int id)
{
}
并将您的网址更改为
url: '/api/CheckPossible/' + myObj["id"]