在asp.net核心中使用路由注释我可以轻松地执行以下操作
[HttpGet("ByID/{id}")]
public int GetByID(int id)
{
return 5;
}
[HttpGet("ByName/{id}")]
public string GetByName(string name)
{
return "neil";
}
但是,在控制器中使用相同的方法,如何使用WebApiConfig文件中的非注释方式(即.net框架),即我将如何添加到下面以使其适用于上述示例
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
作为奖励,有人可以告诉我如何将两个GET项目的URL映射相同,仅按类型区分,例如。
[HttpGet("{id}")]
[HttpGet("{name}")]
其中一个是整数,一个是字符串 - 换句话说,与上面相同但不必指定两个单独的url段(ByID,ByName)?
答案 0 :(得分:1)
您可以使用路径约束来区分相同路径的操作。
[RoutePrefix("api/somepath")]
public class MyController : ApiController {
//Matches GET api/somepath/5
[HttpGet]
[Route("{id:int}")]
public int GetByID(int id) {
return id;
}
//Matches GET api/somepath/neil
[HttpGet]
[Route("{name}")]
public string GetByName(string name) {
return name;
}
}
注意默认值是字符串,这就是第二个操作中没有的原因。