0

我在网上API控制器添加的方法我上面读到的: public static void RegisterRoutes(RouteCollection routes) { 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 /人/ GetpeopleInFamily/101 HTTP/1.1

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

我需要做些什么才能使其发挥作用?还有,这是添加返回更复杂数据集的自定义方法的最佳实践吗?

回答

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 }} 
      );