2014-10-30 62 views
0

我創建了一個空的WebAPI項目並添加了一個空的控制器: 在模型文件夾中添加了一個OrderStatus類,其中有兩個道具Id &狀態。沒有什麼花哨。無法擊中Web API中的控制器

public class OrderController : ApiController 
{ 
    [HttpGet] 
    public OrderStatus GetOrderStatus(long orderStatus) 
    { 
     OrderStatus order = new OrderStatus() { OrderId = 10, Status = "2" }; 

     return order; 
    } 
} 

下面是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 } 
    ); 
} 

當我打 端口/ API /階/ OrderStatus 港口含義本地主機,瀏覽器給這個錯誤:

<Error> 
<Message> 
No HTTP resource was found that matches the request URI '/api/Order/OrderStatus'. 
</Message> 
<MessageDetail> 
No action was found on the controller 'Order' that matches the request. 
</MessageDetail> 
</Error> 

什麼我錯過了嗎?

問候。

回答

1

你必須命名您的參數「ID」

但我寧願使用屬性的路由。在我看來,他們更直觀。

public class OrderController : ApiController 
{ 
    [HttpGet, Route("api/order/{orderStatus:long}")] 
    public OrderStatus GetOrderStatus(long orderStatus) 
    { 
     OrderStatus order = new OrderStatus() { OrderId = 10, Status = "2" }; 

     return order; 
    } 
} 

請注意,您必須在大括號中寫入參數。如果該參數不是string類型,那麼您必須添加類似於我的示例中的類型。

+0

這有效。感謝您的時間和答覆。 – Codehelp 2014-10-30 11:33:26

0

如果您使用WebAPI約定,方法名稱可以是Get,Post,Put,Delete。

在你的情況下,你已經定義GetOrderStatus但調用'/ api/Order/OrderStatus'。可能是導致問題。

+0

我必須做些什麼保持方法名稱並使其工作? – Codehelp 2014-10-30 11:23:50

+0

嘗試邁克爾的建議。 – SBirthare 2014-10-30 11:27:32