2016-08-01 60 views
0

我正在使用Web API 2並在ASP.Net 4中開發。這是我試圖學習webapi的示例代碼。有兩條路線。第一條路線是給定商店的服務資源。第二條路線是商店資源路線。爲什麼Web API沒有找到我的資源?

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     name: "Services", 
     url: "store/{id}/services", 
     defaults: new { controller = "Services" } 
    ); 

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

第二條路線「商店」完美地工作。第一條路線是詳細介紹商店中可用的所有服務。當我嘗試

/API /存儲/ 1 /服務

我得到404錯誤。有人能指點我做錯了什麼嗎?

這裏是控制器

namespace APITestter1.Controllers 
{ 
    public class ServicesController : ApiController 
    { 
     public string Get(int id, string prop = "xxx") 
     { 
      return "Hello services World!" + id + " added attribute " + prop; 
     } 

     public string Post(int id, string prop = "xxx") 
     { 
      return "Hello Post World!" + id + " added attribute " + prop; 
     } 

    } 
} 

回答

1

我不明白爲什麼前綴加「api」和「道具」?

我更新代碼:

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Services", 
      url: "api/store/{id}/services/{prop}", 
      defaults: new { controller = "Services", action = "store", prop = UrlParameter.Optional } 
     ); 

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


namespace APITestter1.Controllers 
{ 
    public class ServicesController : ApiController 
    { 
     [HttpGet, ActionName="store"] 
     public string Get(int id, string prop = "xxx") 
     { 
      return "Hello services World!" + id + " added attribute " + prop; 
     } 

     [HttpPost, ActionName="store"] 
     public string Post(int id, string prop = "xxx") 
     { 
      return "Hello Post World!" + id + " added attribute " + prop; 
     } 

    } 
} 
1

你在錯誤的文件映射您的Web API的路線。如果你正在做網頁API,然後尋找WebApiConfig.cs文件,並在那裏映射你的網頁API路線。

您也在嘗試瀏覽到/api/store/1/services,但在您的示例中,您將路線映射爲store/{id}/services。請注意,您的路線模板中沒有api

以下Web API的配置應該符合你正在嘗試做

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Attribute routing. 
     config.MapHttpAttributeRoutes(); 

     // Convention-based routing. 
     config.Routes.MapHttpRoute(
      name: "ServicesApi", 
      routeTemplate: "api/store/{id}/services", 
      defaults: new { controller = "Services" } 
     ); 

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

你也說你的第二條路線「商店」的作品完美,但沒有表現出你使用什麼URL。假設它是/api/store/1那麼它將工作,因爲它映射到使用api/{controller}/{id}DefaultApi路由模板。

相關問題