【问题标题】:Prevent MVC Web Api to load default Get阻止 MVC Web Api 加载默认 Get
【发布时间】:2014-03-18 12:07:34
【问题描述】:

我的 ProductController 中设置了 Products 两个功能

public IEnumerable<ProductResponse> Get()

[HttpGet]
[ActionName("search")]
public IEnumerable<ProductResponse> SearchProducts([FromUri]string keyword)

调用 /api/products 使 Get() 函数执行,我得到所有产品的列表。调用 /api/products/search/?keyword="test" 使 SearchProduct() 函数执行,我得到按关键字过滤的所有产品的列表。

但是,当我在没有指定关键字参数的情况下调用 /api/products/search/ 时,我想返回错误,而是执行 Get() 函数。如果未指定参数,如何防止控制器默认为 Get() 函数并返回错误。这是我的路线。

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

        config.Routes.MapHttpRoute(
            name: "DefaultApiWithAction",
            routeTemplate: "api/{controller}/{action}",
            defaults: new { controller = "products", action = "search" }
        );

【问题讨论】:

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


    【解决方案1】:

    只需像这样更改您的WebApiConfig 并更改顺序

     config.Routes.MapHttpRoute("DefaultApi", "api/values/{action}", defaults: new { controller = "values" });
    


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

    【讨论】:

    • 所以我在 WebApiCONfig 中编辑了第二行,使其看起来像这个 config.Routes.MapHttpRoute( name: "ProductSearch", routeTemplate: "api/products/{action}", defaults: new { controller = "产品" } );但这并没有做任何事情。我做错了什么?
    • @VladimirKuzin 记得把你的路由放在默认路由之前,因为默认路由会在自定义路由之前捕获请求。即先放置此行,然后放置 DefaultApi 路由
    猜你喜欢
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多