我开始了一个新的 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 的路由调试器,它显示当我浏览到这个 Url 时:
http://localhost:22283/api/Categories/a/b/c/d
我正在寻找的路线匹配:
匹配路由:api/{controller}/{level1}/{level2}/{level3}/{level4} 路线数据 核心价值 控制器类别 一级a 2级b 3级c 4级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();
}
}