使用自定义类重新定义[FromQuery]而不获取值

时间:2017-09-21 11:28:10

标签: c# .net asp.net-web-api refit

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

例如:

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

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

这就是我所拥有的一切:

Get方法(Web API中的Controller):

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

MyClass是:

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。

我做错了什么?

3 个答案:

答案 0 :(得分: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。

如果在launchSettings.json中将/api/mycontroller设置为launchUrl,则在应用程序启动时,您将获得Prop = 0的MyClass实例。但是下一次使用Refit的调用应该传递参数

答案 1 :(得分:0)

我认为您的问题是模型绑定。调整序列化对象的方式以及API序列化/反序列化的工作方式应匹配。改装具有序列化设置,您需要进行调整。你能看得到吗?

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

在JSON内容部分下。

类似地,您的API应该使用相同的序列化设置。您可以在Startup.cs

的服务中对其进行配置

答案 2 :(得分:-2)

解决方案是实现IFormattable。在检查了Refit源代码后,发现它没有记录。