无法使RestSharp将对象的参数发送到Web api控制器(总是为null)?

时间:2019-01-25 12:02:21

标签: c# asp.net-web-api asp.net-web-api2 restsharp

我有一个简单的控制器方法,如下所示:

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

1 个答案:

答案 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; }
}