执行对Web API的简单调用使用RestRequest和单个字符串参数

时间:2014-09-04 19:28:15

标签: asp.net-web-api

我的接收控制器中有以下代码:

[Route("api/StudentUserId/{string}"), HttpGet]
public StudentDto StudentUserId(string userId)
    {
        StudentModel sm = new StudentModel(userId);
        StudentDto dto = sm.ConvertToDto();
        return dto;
    }

运行此项目后,我有另一个项目用于测试WebAPI控制器调用。我使用以下代码使用userId:

从数据库中读取学生记录
protected T SendRequestToReadItemUsingString<T>(string resource, string userId) where T : new()
{
    string resourceString = string.Format("{0}/{{userId}}", resource);
    RestRequest request = new RestRequest(resourceString, Method.GET);
    request.AddUrlSegment("userId", userId);
    RestClient restClient = new RestClient(Service.Location);
    var response = restClient.Execute<T>(request);

    T retVal = response.Data;
    return retVal;
}

如果我在控制器和调用代码中将userId更改为int Id,则可比代码似乎有效。我似乎无法使用字符串。如果我在控制器代码中放置一个断点,它就永远不会命中它,而调用代码只返回一个空值。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

  

请注意 WebApi 基于反射工作,这意味着您的花括号{vars}必须与您的方法中的相同名称匹配。

因此,要匹配此api/StudentUserId/{string},您的方法需要声明如下:

   [Route("api/StudentUserId/{userId}"), HttpGet]
   public StudentDto StudentUserId(string userId)
       return userId;
   }

参数{string}userId替换。

如果您想了解有关此路由规则的更多信息,请参阅此类文章;

WebApi Routing Configuration