我正在使用asp.net net mvc4和javascript构建单页应用程序。
我的javascript有自己的路由引擎,所以我想让所有路由都在root下由javascript处理,api
下的所有路由都由服务器端处理。即:
/ <--- 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 }
);
欢迎任何想法,谢谢!
答案 0 :(得分:16)
除非使用catch-all参数,否则路径URL中不存在参数的默认值。您还需要首先创建API路由,以避免被catch-all路由消耗。
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的入口点框架。