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