我试图获得一个API控制器在ASP.NET MVC 4网络应用程序内部工作。然而,每个请求导致一个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 } ); } }
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);
错误订单:
AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); WebApiConfig.Register(GlobalConfiguration.Configuration);
只是说,这是我的问题,改变顺序是显而易见的,但有时被忽视,可以造成很多挫折。