Asp.net mvc 无法命中Web API中的控制器

Asp.net mvc 无法命中Web API中的控制器,asp.net-mvc,asp.net-web-api,Asp.net Mvc,Asp.net Web Api,我创建了一个空的WebAPI项目,并使用以下代码添加了一个空控制器: 在models文件夹中添加了一个OrderStatus类,其中包含两个props Id和Status。没什么特别的 public class OrderController : ApiController { [HttpGet] public OrderStatus GetOrderStatus(long orderStatus) { OrderStatus order = new Or

我创建了一个空的WebAPI项目,并使用以下代码添加了一个空控制器: 在models文件夹中添加了一个OrderStatus类,其中包含两个props Id和Status。没什么特别的

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/订单/订单状态 端口表示本地主机,浏览器会出现以下错误:

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

未找到与请求URI“/api/Order/OrderStatus”匹配的HTTP资源。
在与请求匹配的控制器“订单”上未找到任何操作。
我错过了什么


注意。

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


在本例中,您已经定义了
GetOrderStatus
,但调用了“/api/Order/OrderStatus”。这可能是导致问题的原因。

您必须将参数命名为“id”

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

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
,则必须添加我示例中的类型。

在我的示例中,原因是我将项目复制到了另一个目录,但IIS Express的“applicationhost.config”文件没有更改。所以当从新目录执行时,IIS试图从旧目录执行站点


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

试试Michael的建议。