将int传递给webapi

时间:2017-11-17 11:44:09

标签: c# jquery ajax asp.net-web-api

我知道这已被问了一千次。但我找不到我的错误。我通过在没有参数的情况下对其进行测试来缩小范围,该参数有效,然后尝试各种各样的事喜欢,获取或发布,[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');
    }
});

没用。也许我也错过了其他的东西

1 个答案:

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