我开始了一个新的Web Api MVC4项目,并且没有运气弄清楚我在路由器上做错了什么。我的简单Get请求的路由返回404。
以下是我的路线定义:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("ApiDefault", "api/{controller}/{id}",
new {controller = "Home", id = UrlParameter.Optional});
routes.MapRoute("ApiDefault-CategoryLevels", "api/{controller}/{level1}/{level2}/{level3}/{level4}",
new
{
controller = "Home",
level1 = UrlParameter.Optional,
level2 = UrlParameter.Optional,
level3 = UrlParameter.Optional,
level4 = UrlParameter.Optional
});
routes.MapRoute("Default", "{controller}/{action}/{id}",
new {controller = "Home", action = "Index", id = UrlParameter.Optional});
}
我正在尝试使用ApiDefault-CategoryLevels路由。我安装了Phil Haack的routing debugger,它显示当我浏览到这个Url时:
http://localhost:22283/api/Categories/a/b/c/d
我正在寻找的路线是否匹配:
Matched Route: api/{controller}/{level1}/{level2}/{level3}/{level4} Route Data Key Value controller Categories level1 a level2 b level3 c level4 d
但是,从IIS Web服务器返回的是404。
当我以这种方式调用相同的URL时,使用查询字符串,它可以工作:
http://localhost:22283/api/Categories?level1=A&level2=B&level3=C&level4=D
网络请求有效,我收到了我期待的结果。只有当我尝试请求时,第一种方式才会返回404。
以下是我的CategoriesController的全部内容:
public class CategoriesController : ApiController
{
public IEnumerable<CategoryModel> Get(string level1 = null, string level2 = null, string level3 = null, string level4 = null)
{
return new[] {new CategoryModel()};
}
public CategoryModel Get(Guid id)
{
return new CategoryModel();
}
}
答案 0 :(得分:3)
您正在将基于ApiController的路线添加到RouteTable.Routes。您应该将它们添加到GlobalConfiguration.Configuration。也就是说,您似乎已将它们添加到MVC 4项目模板的RouteConfig.RegisterRoutes(RouteCollection)中。如果您使用MVC4 Web API项目模板,请将它们添加到WebApiConfig.Register(HttpConfiguration)方法中。