首页 文章

在API控制器中调用自定义方法

提问于
浏览
0

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

public String GetpeopleInFamily(string familyId)

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

我根据上面的内容更新了我的RouteConfig.cs文件:public static void RegisterRoutes(RouteCollection routes){routes.IgnoreRoute(“ .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:

Request GET /api/people/GetpeopleInFamily/101 HTTP/1.1

{“消息”:“找不到与请求URI匹配的HTTP资源'http:// localhost:17438 / api / people / GetpeopleInFamily / 101' . ”,“MessageDetail”:“控制器上未找到任何操作”与请求匹配的人 . “}

我需要做些什么才能让它发挥作用?同样,这是添加返回更复杂数据集的自定义方法的最佳做法吗?

2 回答

  • 1

    familyId 未映射到路径中 . 因此,您可以创建一个新的Mapping,它将familyId添加到id映射或将 GetPeopleInFamily 的参数重写为 id .

    改写:

    public string GetPeopleInFamily(string id)
    

    创建新路由:创建新路由时,请确保使用 id 删除映射,否则将无法正常工作 .

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

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

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

相关问题