gpt4 book ai didi

c# - 将 JSON HttpContent 发布到 ASP.NET Web API

转载 作者:可可西里 更新时间:2023-11-01 08:27:59 25 4
gpt4 key购买 nike

我有一个 ASP.NET Web API 托管并且可以很好地访问 http get 请求,我现在需要将几个参数传递给 PostAsync 请求,如下所示:

var param = Newtonsoft.Json.JsonConvert.SerializeObject(new { id=_id, code = _code });
HttpContent contentPost = new StringContent(param, Encoding.UTF8, "application/json");

var response = client.PostAsync(string.Format("api/inventory/getinventorybylocationidandcode"), contentPost).Result;

此调用返回 404 Not Found 结果。

服务器端 API 操作如下所示:

[HttpPost]
public List<ItemInLocationModel> GetInventoryByLocationIDAndCode(int id, string code) {
...
}

只是为了确认我在 Web API 上的路线如下所示:

config.Routes.MapHttpRoute(
name: "DefaultApiWithAction",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);

我假设我错误地传递了 JSON HttpContent,为什么会返回状态 404?

最佳答案

您收到 404 的原因是框架没有找到根据您的请求执行的方法。默认情况下,Web API 使用以下规则在方法中绑定(bind)参数:

  • 如果参数是“简单”类型,Web API 会尝试从 URI 中获取值。简单类型包括 .NET 基元类型(int、bool、double 等),加上 TimeSpan、DateTime、Guid、decimal 和 string,以及任何具有可以从字符串转换的类型转换器的类型。 (稍后会详细介绍类型转换器。)
  • 对于复杂类型,Web API 尝试使用 media-type formatter 从消息正文中读取值.

鉴于这些规则,如果你想从 POST 主体绑定(bind)参数,只需在类型前面添加一个 [FromBody] 属性:

[HttpPost]
public List<ItemInLocationModel> GetInventoryByLocationIDAndCode([FromBody] int id, string code) {
...
}

更多信息please see the documentation .

关于c# - 将 JSON HttpContent 发布到 ASP.NET Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24109246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com