【发布时间】:2013-03-11 11:09:46
【问题描述】:
我正在尝试让 API 控制器在 ASP.NET MVC 4 Web 应用程序中工作。但是,每个请求都会导致 404,我很困惑。 :/
我有来自项目模板的标准 API 控制器路由,定义如下:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
注册在 Global.asax 中调用:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
// Register API routes
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
我有一个这样的基本 API 控制器:
namespace Website.Controllers
{
public class FavoritesController : ApiController
{
// GET api/<controller>
public IEnumerable<string> Get()
{
return new [] { "first", "second" };
}
// PUT api/<controller>/5
public void Put(int id)
{
}
// DELETE api/<controller>/5
public void Delete(int id)
{
}
}
}
现在,当我浏览到 localhost:59900/api/Favorites 时,我希望调用 Get 方法,但我得到的是 404 状态码和以下响应:
<Error>
<Message>
No HTTP resource was found that matches the request URI 'http://localhost:59900/api/Favorites'.
</Message>
<MessageDetail>
No type was found that matches the controller named 'Favorites'.
</MessageDetail>
</Error>
任何帮助将不胜感激,我在这里有点失去理智。 :) 谢谢!
【问题讨论】:
-
您是否尝试过使用 Phil Haack 的 Route Tester 测试您的路线? haacked.com/archive/2008/03/13/url-routing-debugger.aspx
-
路由测试器说 /api/Favorites 请求匹配 api/{controller}/{id} 路由模式。但是,还有其他外部路由匹配列表中的较高位置。也许那些路线正在拦截我的请求......
-
清除了所有其他路由,结果还是一样。 :(
-
为什么要覆盖 Application_Start?默认情况下,该方法将注册您在覆盖方法中拥有的内容。可能是两次注册的路由导致了问题。
-
我有一个要继承的抽象基类。我试过跳过继承,但结果保持不变。不过感谢您的帮助!我将编辑问题以消除任何混乱。 :)
标签: asp.net-mvc asp.net-mvc-4 asp.net-web-api