我正在尝试让API控制器在ASP.NET MVC4 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>
如果你能帮上忙我会很感激的,我有点发疯了。:)谢谢!
我遇到的一件事是在global.asax文件中以错误的顺序注册了配置,例如:
正确顺序:
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
null
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
WebApiConfig.Register(GlobalConfiguration.Configuration);
只是说,这是我的问题,改变顺序是显而易见的,但有时被忽视,会造成很多挫折。
基本上也有同样的问题,在我的情况下,通过补充:
<modules runAllManagedModulesForAllRequests="true" />
到
<system.webServer>
</system.webServer>
web.config的部分
我一直在研究一个类似的问题,我花了很长时间才找到这个问题。这并不是这篇文章的解决方案,但希望添加这一内容可以为一些人节省一些时间,当他们在搜索为什么他们的控制器可能会出现404错误时,他们试图找到问题。
基本上,我在类名末尾拼错了“controller”。就这么简单!