【问题标题】:Calling custom methods in API controller在 API 控制器中调用自定义方法
【发布时间】:2015-04-05 16:36:53
【问题描述】:

我在我的 web api 控制器中添加了一个方法:

public String GetpeopleInFamily(string familyId)

我遵循了这个问题的一些例子: Custom method names in ASP.NET Web API

我根据上面阅读的内容更新了我的 RouteConfig.cs 文件: 公共静态无效注册路由(RouteCollection 路由) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { id = UrlParameter.Optional }
        );



        routes.MapHttpRoute("DefaultApiWithId", "Api/{controller}/{id}", new { id = RouteParameter.Optional }, new { id = @"\d+" });
        routes.MapHttpRoute("DefaultApiWithAction", "Api/{controller}/{action}");
        routes.MapHttpRoute("DefaultApiWithActionAndId", "Api/{controller}/{action}/{id}", new { id = RouteParameter.Optional }, new { id = @"\d+" });
        routes.MapHttpRoute("DefaultApiGet", "Api/{controller}", new { action = "Get" }, new { httpMethod = new HttpMethodConstraint("Get") });
        routes.MapHttpRoute("DefaultApiPost", "Api/{controller}", new { action = "Post" }, new { httpMethod = new HttpMethodConstraint("Post") });
    }

但我在调用该方法时仍然收到 404:

请求 GET /api/people/GetpeopleInFamily/101 HTTP/1.1

{"Message":"没有找到与请求URI匹配的HTTP资源 'http://localhost:17438/api/people/GetpeopleInFamily/101 '.","MessageDetail":"在控制器 'people' 上没有找到任何动作 匹配请求。"}

我需要做什么才能让它工作?此外,这是添加返回更复杂数据集的自定义方法的最佳做法吗?

【问题讨论】:

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


    【解决方案1】:

    familyId 未映射到路由中。所以你可以创建一个新的映射,将familyId添加到id映射或将GetPeopleInFamily的参数重写为id。

    重写:

    public string GetPeopleInFamily(string id)
    

    创建新路由:创建新路由时,请务必删除带有id 的映射,否则将无法正常工作。

    routes.MapHttpRoute("DefaultApiWithActionAndFamilyId", "Api/{controller}/{action}/{familyId}", new { familyId = RouteParameter.Optional }, new { familyId = @"\d+" });
    

    【讨论】:

      【解决方案2】:

      您需要配置您的 Web API 路由以接受 familyId 参数。

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

      【讨论】:

        猜你喜欢
        • 2012-12-25
        • 1970-01-01
        • 2015-10-19
        • 1970-01-01
        • 2011-07-23
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多