Asp.net mvc 无法命中Web API中的控制器
我创建了一个空的WebAPI项目,并使用以下代码添加了一个空控制器: 在models文件夹中添加了一个OrderStatus类,其中包含两个props Id和Status。没什么特别的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
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的建议。