6

我正在使用 asp.net net mvc4 和 javascript 构建一个单页应用程序。

我的 javascript 有它自己的路由引擎,所以我希望根目录下的所有路由都由 javascript 处理,所有路由api都由服务器端处理。IE:

/             <--- javascript handles 
/api          <--- ASP.NET MVC handles

但是,我不知道如何告诉 ASP.NET MVC 不处理这些路由,而且我到目前为止所尝试的甚至都没有运行:

        routes.MapRoute(
            name: "Client",
            url: "/",
            defaults: new { controller = "Home", action = "Index",  }
        );

        routes.MapRoute(
            name: "API",
            url: "api/{controller}/{action}/{id}",
            defaults: new { controller = "Tasks", action = "Index", id = UrlParameter.Optional }
        );

欢迎任何想法,谢谢!

4

1 回答 1

18

您不能为路由 URL 中不存在的参数设置默认值,除非您使用包罗万象的参数。您还需要首先创建您的 API 路由,以避免它被包罗万象的路由消耗。

routes.MapRoute(
    name: "API",
    url: "api/{controller}/{action}/{id}",
    defaults: new { controller="Tasks", action="Index", id=UrlParameter.Optional }
);

routes.MapRoute(
    "Default", // Route name
    "{*catchall}", // URL with parameters
    new { controller = "Home", action = "Index" } // Parameter defaults
);

更新:我应该提到,在这种情况下,.NET MVC 仍会将任何与“API”不匹配的请求转发到“Home/Index”,在您的情况下,它应该为您的客户端 MVC 框架的入口点提供服务。

于 2012-09-26T16:17:48.893 回答