【发布时间】:2015-05-03 12:02:37
【问题描述】:
我得到了以下代码,但我无法让动作名称起作用,还是这里有其他问题?我想创建一个自定义搜索,通常当您在 api 中查找一个对象时,您会搜索 id,但我想搜索例如工作日,但它实际上可以是任何东西。
DayController.cs:
[ActionName("Weekday")]
public IHttpActionResult GetDayWeek(string q_day) {
var day = controller.GetDay(q_day);
if (day == null) {
return NotFound();
}
return Ok(day);
}
Controller.cs:
public Day GetDay(string q_day) {
var day = dal.GetDayByWeekday(q_day);
return day;
}
Dal.cs:
public Day GetDayByWeekday(string q_day) {
var day = db.Day.Where(d = > d.Weekday == q_day).Single();
return day;
}
WebApiConfig.cs:
public static void Register(HttpConfiguration config) {
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new {
id = RouteParameter.Optional
});
}
错误:
<Error>
<Message>
No HTTP resource was found that matches the request URI 'http://localhost:2096/api/Day/Weekday/monday'.
</Message>
<MessageDetail>
No action was found on the controller 'Day' that matches the request.
</MessageDetail>
</Error>
【问题讨论】:
-
我不是使用 Web API 的向导 - 但是您是否也尝试将 [HttpPost] 属性添加到方法中?并确保您正在从 javascript 发出后请求?
-
我想我应该能够通过例如转到“/api/Day/Weekday/monday”来测试没有任何 js 的 api?
-
是的,只要确保它是 POST 请求而不是 GET/PUT/DELETE 请求
-
添加了[HttpPost],还是一样的错误
-
另请注意,由于您的函数参数未调用 Id,因此可能存在映射问题。正确设置路线以捕获您的变量
[Route("weekday/{q_day}")]
标签: c# asp.net-web-api