【问题标题】:Web API route not getting called未调用 Web API 路由
【发布时间】:2019-03-30 18:35:26
【问题描述】:

这是我的网络 API 配置:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
           name: "ReaderTags",
           routeTemplate: "Reader/{readerID}/Tags"
       );

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

    }
}

我希望当我调用我的 URL /Reader/abc/Tags 时,它应该调用我的 ReaderController 的 Tags 操作并将 abc 作为字符串参数传递。

但不知何故,它正在使用DefaultAPI 的路线并试图在ReaderController 中找到abc 作为操作。

我错过了什么?

【问题讨论】:

    标签: c# asp.net .net asp.net-web-api asp.net-web-api-routing


    【解决方案1】:

    路由映射缺少默认值,这将使路由表知道为匹配模板的路由调用什么控制器和操作

    config.Routes.MapHttpRoute(
        name: "ReaderTags",
        routeTemplate: "Reader/{readerID}/Tags",
        defaults: new { controller = "Reader", action = "Tags" }
    );
    

    路由模板还假定操作上的字符串参数具有相同的名称:即:readerID

    public IHttpActionResult Tags(string readerID) {
        //...
    }
    

    而且由于config.MapHttpAttributeRoutes();也被配置了,那么同样可以通过属性路由来实现,而不是像这样基于约定的路由

    //GET Reader/abc/Tags
    [HttpGet]
    [Route("Reader/{readerID}/Tags")]
    public IHttpActionResult Tags(string readerID) {
        //...
    }
    

    【讨论】:

    • 很棒的东西
    猜你喜欢
    • 2013-06-02
    • 2019-09-20
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 2021-10-01
    相关资源
    最近更新 更多