无法使 RestSharp 将对象的参数发送到 Web API 控制器(始终为空)



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

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),就像我使用ExecuteExecuteAsync之前一样。

你能发现这里有什么不对劲的地方吗?谢谢!

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

最新更新