所以我创建了一个api,网址应如下所示:http://localhost:16769/api/query/2/John_Doe
。当我运行这个url时,它将带我到我的第二个Get功能。
QueryController.cs
// GET api/query
public string Get(int id, string param)
{
string output = "";
output = JsonConvert.SerializeObject(null);
return output;
}
// GET api/query/5
public string Get(int id)
{
return "value";
}
第一个参数将始终是一个整数,其中第二个参数始终是一个字符串,并且这个get请求都需要这两个参数。这是我的配置文件设置。
WebApiConfig.cs
config.Routes.MapHttpRoute(
name: "Query",
routeTemplate: "api/query/{id}/{paramString}",
defaults: new {
controller = "query",
id = RouteParameter.Optional,
paramString = RouteParameter.Optional
}
);
使用上面的url允许输出为" value"。如果我注释掉第二个Get函数,我会收到以下错误:
No HTTP resource was found that matches the request URI 'http://localhost:16769/api/query/2/John_Doe'. No action was found on the controller 'Query' that matches the request.
如何设置路线或方法以使用此模式?
答案 0 :(得分:1)
使用属性路由:
[RoutePrefix("api/query")
public QueryController: ApiController
{
[Route("{id}/{param}")]
public string Get(int id, string param)
{
string output = "";
output = JsonConvert.SerializeObject(null);
return output;
}
// GET api/query/5
[Route("{id}")]
public string Get(int id)
{
return "value";
}
}
然后您的路线配置可以恢复为默认值。
答案 1 :(得分:1)
我猜你需要在第一个方法上重命名你的参数,使其与你的routetemplate同步,即在第一个方法中使用param作为变量名,用paramString替换它,看看它是否有效