无法在Web API中访问控制器

时间:2014-10-30 11:10:21

标签: asp.net-mvc asp.net-web-api

我创建了一个Empty WebAPI项目,并使用以下代码添加了一个空控制器: 在models文件夹中添加了一个OrderStatus类,其中包含两个道具Id&状态。没什么好看的。

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 端口意味着localhost,浏览器给出了这个错误:

<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>

我错过了什么?

问候。

3 个答案:

答案 0 :(得分:1)

您必须为参数命名&#34; id&#34;

但我更喜欢使用属性路由。在我看来,它们更直观。

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类型,那么你必须像我的例子一样添加类型。

答案 1 :(得分:0)

如果使用WebAPI约定,方法名称可以是Get,Post,Put,Delete。

在您的情况下,您已定义GetOrderStatus,但要调用&#39; / api / Order / OrderStatus&#39;。可能是造成问题的原因。

答案 2 :(得分:0)

在我的情况下,原因是我将我的项目复制到另一个目录,但&#34; applicationhost.config&#34; IIS Express的文件没有改变。因此,当从新目录执行时,IIS试图从旧目录执行站点。

从applicationhost.config中删除网站信息的条目为我解决了这个问题。