5

我的 Web API 中的 Get 方法有问题:API 获取对象但使用默认值。

例如:

myRefitClient.GetSummary(new MyClass() { Prop = 1 });

Web API 正确接收MyClass实例,但Prop为 0!

这就是我所拥有的:

Get 方法(Web API 中的控制器):

[HttpGet]
async Task<ActionResult> Get([FromQuery]MyClass req)

我的班级是:

public class MyClass
{
    public int Prop { get; set; }
}

我的 Refit 的 Web API 接口是:

public interface IMyWebApi
{
    [Get("/api/mycontroller")]
    Task<PositionSummary> GetSummary(MyClass req);
}

所以,正如我所说,在电话会议上:

service.GetSummary(new MyClass() { Prop = 1 });

MyClass在控制器中获得了一个实例,但 Prop 是 0,而不是 1。

我究竟做错了什么?

4

3 回答 3

5

要强制 ASP.NET Web API(不是 ASP.NET Core)从 URI 读取复杂类型,请将[FromUri]属性添加到参数:

[HttpGet]
public async Task<ActionResult> Get([FromUri]MyClass req)

如果您使用的是 ASP.NET Core,则使用[FromQuery]属性

[HttpGet]
public async Task<ActionResult> Get([FromQuery]MyClass req)

我在我的控制器中获得了一个 MyClass 实例,但 Prop 是 0,而不是 1。

如果/api/mycontroller在launchSettings.json 中设置为launchUrl,那么您将在应用程序开始时获得Prop = 0 的MyClass Instance。但是使用 Refit 的下一个调用应该传递参数

于 2019-09-25T19:22:55.357 回答
0

我认为您的问题是模型绑定。refit 序列化对象的方式和 API 序列化/反序列化的工作方式应该匹配。改装有序列化设置,需要调整。你能看出来吗?

看看: https ://reactiveui.github.io/refit/

在 JSON 内容部分下。

同样,您的 API 应该使用相同的序列化设置。您可以在您的服务中配置它Startup.cs

于 2019-09-25T19:44:44.423 回答
-2

解决方案是实现 IFormattable。发现经过改装源代码后,奇怪的是它没有记录在案。

于 2019-09-30T13:05:55.277 回答