Web 中的多个路由 API 2
Multiple Routing in Web API 2
我正在使用 Web API 2,我想使用 (name & id) 等参数进行路由。
当我尝试这个时:
config.Routes.MapHttpRoute(
name: "IDApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "NameApi",
routeTemplate: "api/{controller}/{action}/{name}",
defaults: new { name = RouteParameter.Optional }
);
我找到了路线 'api/customer/getByID/5' 工作正常。
但是路线'api/customer/searchByName/fawzy'没有成功。
如果我在 IDAPI 路由之前设置 NameAPI 路由,结果是对面
有什么想法吗?
您可以将命名空间 System.Web.Http.Routing
中的属性 [Route("api/customer/searchByName/{name}")]
用于 searchByName
操作。
我通过结合使用 模式和路由属性
解决了这个问题
在 WebAPIConfig 文件中:
config.Routes.MapHttpRoute(
name: "IDApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: null,
constraints: new { id = @"^[0-9]+$" }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}",
defaults: null
);
在控制器中:
[HttpGet]
[Route("api/customer/search/{name}")]
public IHttpActionResult Search(string name)
{
}
[HttpGet]
public IHttpActionResult Get(int id)
{
}
我正在使用 Web API 2,我想使用 (name & id) 等参数进行路由。
当我尝试这个时:
config.Routes.MapHttpRoute(
name: "IDApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "NameApi",
routeTemplate: "api/{controller}/{action}/{name}",
defaults: new { name = RouteParameter.Optional }
);
我找到了路线 'api/customer/getByID/5' 工作正常。
但是路线'api/customer/searchByName/fawzy'没有成功。
如果我在 IDAPI 路由之前设置 NameAPI 路由,结果是对面
有什么想法吗?
您可以将命名空间 System.Web.Http.Routing
中的属性 [Route("api/customer/searchByName/{name}")]
用于 searchByName
操作。
我通过结合使用 模式和路由属性
解决了这个问题在 WebAPIConfig 文件中:
config.Routes.MapHttpRoute(
name: "IDApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: null,
constraints: new { id = @"^[0-9]+$" }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}",
defaults: null
);
在控制器中:
[HttpGet]
[Route("api/customer/search/{name}")]
public IHttpActionResult Search(string name)
{
}
[HttpGet]
public IHttpActionResult Get(int id)
{
}