首页 > 解决方案 > 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路由,结果是相反的。

有任何想法吗 ?

标签: c#asp.net-web-api2

解决方案


我通过模式和路由属性的组合解决了这个问题

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)
{

}

推荐阅读