首页 > 解决方案 > 如何更改 WebAPI 2 路由中的参数名称

问题描述

使用默认路由

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

我可以达到像 GET http://ip:port/api/dogs/Henry这样的隐式操作:

public class DogsController:ApiController
{
    public Dog Get(string id) => DogRepository.GetDog(id);
}

但是,据我所知,这需要动作参数名称与路由定义匹配:“id”。我喜欢描述性的参数名称,那么如何将参数名称从“id”更改为“dogName”?

我知道一个控制器和一个路由很明显,但我的 api 中可能有猫、金鱼和大象,所以“dogName”在所有情况下都不是描述性参数名。

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

解决方案


您可以使用该FromUriAttribute.Name属性:

public Dog Get([FromUri(Name = "id")]string dogName) => DogRepository.GetDog(dogName);

请注意,在 ASP.NET Core 中,调用了相应的属性,FromRoute但行为基本相同(在这种情况下)。


推荐阅读