MVC4 WebApi路由返回404

时间:2013-01-30 18:26:57

标签: asp.net-mvc-4 asp.net-web-api-routing

我开始了一个新的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();
    }
}

1 个答案:

答案 0 :(得分:3)

您正在将基于ApiController的路线添加到RouteTable.Routes。您应该将它们添加到GlobalConfiguration.Configuration。也就是说,您似乎已将它们添加到MVC 4项目模板的RouteConfig.RegisterRoutes(RouteCollection)中。如果您使用MVC4 Web API项目模板,请将它们添加到WebApiConfig.Register(HttpConfiguration)方法中。