【问题标题】:How to use the same route with different parameter types?如何使用具有不同参数类型的相同路由?
【发布时间】:2015-08-18 21:32:49
【问题描述】:

我有一个 Api 控制器,它有两个不同的动作,它们采用不同的参数类型。

    // GET: users/sample%40email.com
    [Route("users/{emailAddress}")]
    public IHttpActionResult GetUser(string emailAddress)

    // GET: users/1D8F6B90-9BD9-4CDD-BABB-372242AD9960
    [Route("users/{reference}")]
    public IHttpActionResult GetUserByReference(Guid reference)

问题是当我向其中一个请求时发现多个操作匹配。查看其他答案,我认为我需要像这样在 WebApiConfig 中设置路由......

            config.Routes.MapHttpRoute(
            name: "apiEmail",
            routeTemplate: "api/{controller}/{action}/{email}"
            );

        config.Routes.MapHttpRoute(
            name: "apiReference",
            routeTemplate: "api/{controller}/{action}/{reference}"
            );

我需要做什么才能根据我传入的参数类型调用每个操作?

我对 Web.Api 非常陌生,如果有任何额外的解释文本,我将不胜感激。

【问题讨论】:

    标签: asp.net-mvc-5 asp.net-mvc-routing asp.net-web-api asp.net-web-api-routing


    【解决方案1】:

    您确实喜欢下面启用属性路由的方法声明: //用guid 1st声明方法

    // GET: users/1D8F6B90-9BD9-4CDD-BABB-372242AD9960
    [Route("users/{reference:guid}")]
    public IHttpActionResult GetUserByReference(Guid reference)
    

    并声明其他方法,如下所示

    // GET: users/sample%40email.com
    [Route("users/{emailAddress}")]
    public IHttpActionResult GetUser(string emailAddress)
    

    请告诉我,这适合你吗?

    【讨论】:

    • 我收到一个新错误“'DefaultInlineConstraintResolver' 类型的内联约束解析器无法解析以下内联约束:'reference'”可能与 WebApiConfig 有关
    • @OrbitalFriendshipCannon 检查以下参考:DefaultInlineConstraintResolver
    • @OrbitalFriendshipCannon 请检查 WebApiConfig 并删除为常规路由添加的路由。
    猜你喜欢
    • 2013-03-14
    • 2019-10-26
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    相关资源
    最近更新 更多