【问题标题】:Pass int to webapi将 int 传递给 webapi
【发布时间】:2018-05-01 04:28:48
【问题描述】:

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

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

【问题讨论】:

  • 对于获取请求,您需要将参数作为 url 的一部分传递,您不需要以不同的方式发送。将 JavaScript 上的 url 更改为 /api/CheckPossible/Get/123 应该可以。替换 123 ar3 从 parseInt(id) 获得的任何动态值

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


【解决方案1】:

您不能将 http 消息正文传递给 GET 方法,您必须在 URL 或标头中传递参数。对于 web api,您应该在 URL 中传递它们,您可以将其作为查询字符串或作为 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"]

【讨论】:

  • 如果我不想要查询字符串怎么办?唯一的选择是发布然后使用 frombody?
  • @JPHellemons - 它一个路由问题。从您的网址中删除get,因为您可能没有将它包含在您的全局路由方案中。
  • 它起作用了,不知何故我的断点不再设置了,哈哈。 url: '/api/CheckPossible/Get/?id=' + myObj["id"], 可以接受超过 2 分钟的答复。
  • 很高兴您能帮上忙 ;) 并感谢您更新您的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
  • 2016-04-01
  • 2012-12-18
  • 2021-06-01
  • 2013-07-13
  • 1970-01-01
相关资源
最近更新 更多