Web API 2中的多路由

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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路由,则结果相反。

有任何想法吗 ?

答案

您可以使用命名空间[Route("api/customer/searchByName/{name}")]中的属性System.Web.Http.Routing进行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中的多路由的主要内容,如果未能解决你的问题,请参考以下文章

Web API系列教程2.1 — ASP.NET Web API中的路由机制

Web API系列教程2.2 — ASP.NET Web API中的路由和动作选择机制

如何从 Laravel 8 中的自定义 Web 路由中删除“api/”前缀?

Web Api 属性路由中的可选参数

Web API中的路由——基本路由

EF Core 5.0 - 更新 ASP.NET Core Web API 中的多对多实体