我创建了一个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>
我错过了什么?
问候。
答案 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中删除网站信息的条目为我解决了这个问题。