我有一个简单的控制器方法,如下所示:
public IEnumerable<IEntity> GetEntities(ParamsModel args)
{
//set break point here to examine the args
return null;
}
这是我的ParamsModel
:
public class ParamsModel {
public string Test;
}
这是我的客户发送获取请求的方法:
//_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
在控制器的方法中为空)。如果我将控制器的方法更改为这样的方法(并使用上面的客户端代码),我可以看到字符串的单个简单参数在控制器的方法中解析了 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
更新操作以明确说明在何处查找和使用[FromUri]
绑定数据
public IHttpActionResult GetEntities([FromUri]ParamsModel args) {
//...
return Ok(entities);
}
若要强制 Web API 从 URI 读取复杂类型,请将
[FromUri]
属性添加到参数。
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; }
}