2012-09-07 437 views
1

所需的URI ...網絡API路線返回404

http://localhost:5613/api/user/1/HasCompletedInitialScreen 

我已經配置了以下路線...

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.Routes.MapHttpRoute(
      name: "ApiUserHasCompletedInitialScreen", 
      routeTemplate: "api/user/{id}/{hascompletedinitialscreen}"); 

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

和控制器動作......

[HttpGet] 
[ActionName("HasCompletedInitialScreen")] 
public HttpResponseMessage HasCompletedInitialScreen(int id) 
{ 
    var response = Request.CreateResponse<bool>(HttpStatusCode.Created, true); 
    response.Headers.Location = GetLocation(id); 
    return response; 
} 

不過,我得到一個404如何解決我的路由配置和/或控制器動作,使這項工作?

非常感謝!

UPDATE

基於公認的答案,我修改了API路線定義爲以下。希望這可以幫助別人......

 config.Routes.MapHttpRoute(
      name: "QueryApi", 
      routeTemplate: "api/{controller}/{id}/{action}"); 

回答

2

我不知道你正在嘗試做的,但如果你希望能夠調用

http://localhost:5613/api/user/1/HasCompletedInitialScreen 

你的路線需要是這樣的:

config.Routes.MapHttpRoute(
       name: "ApiUserHasCompletedInitialScreen", 
       routeTemplate: "api/user/{id}/{action}", 
       defaults: new { controller = "Something" } 
      ); 

哪裏SomethingController是你含HasCompletedInitialScreen動作控制器。

在一個側面說明,你並不需要聲明ActionName屬性,如果它的名字是一樣的動作方法的名字。