我的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。
我做错了什么?
答案 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源代码后,发现它没有记录。