【问题标题】:How to alter parameter names in WebAPI 2 routing如何更改 WebAPI 2 路由中的参数名称
【发布时间】:2020-04-26 18:40:35
【问题描述】:

使用默认路由

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# routes asp.net-web-api2


    【解决方案1】:

    您可以为此使用FromUriAttribute.Name 属性:

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

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

    【讨论】:

    • 谢谢!虽然在 System.Web.Http 中似乎不存在 FromRoute,但 FromUri 属性在按照您的示例使用时按预期工作。如果你更新我会标记为答案;)
    • 哦,看来FromRoute是在ASP.NET Core中引入的。会更新的,谢谢!
    猜你喜欢
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 2018-03-24
    • 2018-05-16
    • 2018-11-05
    • 1970-01-01
    相关资源
    最近更新 更多