如何更改 WebAPI 2 路由中的参数名称

How to alter parameter names in WebAPI 2 routing

使用默认路由

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" 在所有情况下都不是描述性参数名称。

您可以使用 FromUriAttribute.Name 属性:

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

请注意,在 ASP.NET Core 中,相应的属性称为 FromRoute,但其行为基本相同(在本例中)。