我有一个简单的控制器方法,如下所示:
public IEnumerable<IEntity> GetEntities(ParamsModel args)
{
//set break point here to examine the args
return null;
}
这是我的ParamsModel
:
public class ParamsModel {
public string Test;
}
这是我客户发送get请求的方法:
//_client here is an instance of RestClient
public async Task<IEnumerable<T>> GetEntitiesAsync()
{
var request = new RestRequest("somePath");
var o = new {
Test = "OK"
};
request.AddJsonBody(o);
return await _client.GetAsync<List<T>>(request);
}
运行方法GetEntitiesAsync
之后,将命中断点(在控制器的方法中)。但是args
为空,真的吗?
我也尝试了以下方法:
public async Task<IEnumerable<T>> GetEntitiesAsync()
{
var request = new RestRequest("somePath");
request.AddParameter("Test", "OK");
return await _client.GetAsync<List<T>>(request);
}
但是,该方法也不起作用(控制器方法中的args
为null)。
如果我将控制器的方法更改为类似的方式(并使用上面的客户端代码),则可以看到字符串的单个简单参数在控制器的方法内部具有解析为OK(“ OK”)的值:
public IEnumerable<IEntity> GetEntities(string Test)
{
//here we can see that Test has value of "OK"
return null;
}
真的,我不明白我的代码有什么问题。
实际上,我至少一年前就使用过RestSharp
,但现在似乎有了一些新方法(例如我在代码中使用的GetAsync
),就像以前使用Execute
一样和ExecuteAsync
。
您能在这里发现任何错误吗?谢谢!
PS:我正在使用RestSharp 106.6.7
答案 0 :(得分:2)
更新操作以使用[FromUri]
明确声明在何处查找和绑定数据
public IHttpActionResult GetEntities([FromUri]ParamsModel args) {
//...
return Ok(entities);
}
要强制Web API从URI读取复杂类型,请在参数中添加
[FromUri]
属性。
引用Parameter Binding in ASP.NET Web API
带有AddParameter
public async Task<IEnumerable<T>> GetEntitiesAsync() {
var request = new RestRequest("somePath");
request.AddParameter("Test", "OK");
return await _client.GetAsync<List<T>>(request);
}
现在应该工作。
请注意,模型应使用属性而不是字段
public class ParamsModel {
public string Test { get; set; }
}