如何更改 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
,但其行为基本相同(在本例中)。
使用默认路由
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
,但其行为基本相同(在本例中)。