2017-07-31 41 views
1
[RoutePrefix("subscriptions")] 
    public class SubscriptionsController : ApiController 
    { 
     private SubscriptionsService _subscriptionsService; 

     public SubscriptionsController() 
     { 
      _subscriptionsService = new SubscriptionsService(); 
     } 

     [Route("{email}")] 
     [HttpGet] 
     public IHttpActionResult Get(string email) 
     { 

但是當我嘗試WebApi2找不到路線

http://localhost:51561/api/subscriptions/myEmail

沒有HTTP資源發現,請求URI

'http://localhost:51561/api/subscriptions/myEmail' 匹配。

有什麼想法爲什麼?

我還設置一切WebApiCOnfig

public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 
      // Web API configuration and services 

      // Web API routes 
      config.MapHttpAttributeRoutes(); 

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

你在哪裏設置/ api作爲路由的基礎?在全球範圍內?你的行爲路線意味着你爲什麼要導航到/ myEmail而不是/電子郵件?我會嘗試/訂閱/電子郵件和/ api /訂閱/電子郵件,看看是否其中任何一個工作。 –

+0

你嘗試過'http:// localhost:51561/subscriptions/myEmail'嗎? –

+0

必須以/ api開頭,因爲它是在WebApiConfig中設置的 – mbrc

回答

1

您嘗試過錯誤的URL。 正確的網址應該是,

http://localhost:51561/subscriptions/myEmail 

OR

如果需要API前綴,那麼您需要更改如下控制器的路由前綴,

[RoutePrefix("API/subscriptions")] 

那麼這個網址將工作,

http://localhost:51561/api/subscriptions/myEmail 

請注意,在這裏您使用兩個路由,默認路由和屬性路由。如果您需要繼續使用屬性路由,則可以註釋掉默認路由。

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

我假設你正在創建一些服務的WebAPI?您是否在global.asax.cs中註冊了此路線?類似這樣的:

 httpConfiguration.Routes.MapHttpRoute(
      name: "MyWebApi", 
      routeTemplate: "api/{controller}/{action}/{id}", 
      defaults: new { controller = "ControllerName", action = "ActionName", id = RouteParameter.Optional }, 
      constraints: null 
     );