代码之家  ›  专栏  ›  技术社区  ›  JP Hellemons

将int传递给webapi

  •  1
  • JP Hellemons  · 技术社区  · 8 年前

    我知道这已经被问了一千次了。但是我找不到我的错误。我在没有参数的情况下测试了它,缩小了范围,这很有效,然后尝试了各种方法。比如,get或post,[FromBody]或not。等 也许我应该展示我的代码,或者我应该停下来庆祝今天快到周末了。

    [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 回复  |  直到 8 年前
        1
  •  1
  •   Igor    8 年前

    无法将http消息正文传递给 GET 方法,则必须在URL或标头中传递参数。对于web api,您应该在URL中传递它们,您可以将其作为查询字符串或URL的一部分进行传递。

    要使其与查询字符串一起工作,请将url更改为

    url: '/api/CheckPossible/?id=' + myObj["id"],
    

    省略 data 因为这跟 get .

    如果您想使参数成为URL的一部分,请更改路由以包含它。我更喜欢灵活路由的路由属性,您也可以更改全局路由方案。

    [HttpGet] // also tried post instead of get
    [Route("api/CheckPossible/{id:int}"]
    public HttpResponseMessage Get(int id)
    {
    }
    

    并将您的url更改为

    url: '/api/CheckPossible/' + myObj["id"]