我的接收控制器中有以下代码:
[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,则可比代码似乎有效。我似乎无法使用字符串。如果我在控制器代码中放置一个断点,它就永远不会命中它,而调用代码只返回一个空值。
感谢您的帮助
答案 0 :(得分:0)
请注意 WebApi 基于反射工作,这意味着您的花括号{vars}必须与您的方法中的相同名称匹配。
因此,要匹配此api/StudentUserId/{string}
,您的方法需要声明如下:
[Route("api/StudentUserId/{userId}"), HttpGet]
public StudentDto StudentUserId(string userId)
return userId;
}
参数{string}
被userId
替换。
如果您想了解有关此路由规则的更多信息,请参阅此类文章;