【问题标题】:Call WebApi Endpoint Passing in Object调用 WebApi Endpoint 传入对象
【发布时间】:2019-11-01 14:02:40
【问题描述】:

我有以下端点

[HttpPost]
[DisableRequestSizeLimit]
[RequestFormLimits(KeyLengthLimit = int.MaxValue)]
public IActionResult PostData([FromForm]Data data)

Data 类如下所示

public class Data
{
    public string A { get; set; }
    public string B { get; set; }
}

我是这样调用这个端点的

var url = ...;

var client = new HttpClient();
var data = new
{
    a = "Foo",
    b = "Bar"
};
var result = await client.PostAsJsonAsync(url, data);

但 PostData 方法中的 data 参数始终为空。任何想法我做错了什么?

【问题讨论】:

  • 这不是out 参数,那么comes back 是什么意思? result 也不会为空,它将始终包含响应
  • FromForm?但发布为 JSON。没有表格去
  • FromForm 那 - 表单不使用 JSON - JSON 是至少十年后发明的。使用带有PostAsyncFormUrlEncodedContent 实例。它所需要的输入就是任何实现IEnumerable<System.Collections.Generic.KeyValuePair<string,string>> 的东西,比如Dictionary<string,string>
  • 另一方面,如果 PostData 方法不用于表单,您可以删除 [FromForm]

标签: c# asp.net-core asp.net-web-api httpclient restsharp


【解决方案1】:

如果您的内容类型是application/json,请使用[FromBody] 而不是[FromForm]

【讨论】:

  • 现在 PostData 方法根本不会触发。
  • 您是否将 ContentType 更改为 application/json?
  • 您可能还想从方法中删除 RequestFormLimits 属性。
  • 好的,但我把它放在那里,因为我将传递相当大的数据。
  • 我是否在 DefaultRequestHeaders 上设置内容类型?
猜你喜欢
  • 2015-12-31
  • 2016-04-01
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 2017-10-07
  • 1970-01-01
相关资源
最近更新 更多