【发布时间】:2015-10-15 08:23:31
【问题描述】:
在 MVC6/vNext/.NET5 中使用 AngularJs 的所有示例都使用 wwwroot 中的静态 index.html 文件。完成了,但我现在需要加载 MVC index.cshtml 页面,以便我可以将 config.json 中的设置注入页面。
我想要的只是一个默认页面(主页),无论请求什么 url,只要 url 不是 js/css 文件或 api 控制器,它都会加载。
我已经尝试将它添加到我的Configure(IApplicationBuilder app, IServiceProvider serviceProvider) 方法中,但是现在,我的 js 和 css 文件都拉回了 Home/Index.cshtml 文件
app.UseMvc(options =>
{
options.MapRoute("Api",
template: "api/{version}/{controller}/{action?}",
defaults: new { version = "v1", controller = "Page" });
options.MapRoute(
name: "default",
template: "{*url}",
defaults: new { controller = "Home", action = "Index" });
});
我的应用程序加载到默认地址http://localhost:port,没有额外的文件夹可以开始。通过angularJs,用户可以访问诸如
之类的urlhttp://localhost:6000/page
http://localhost:6000/page/9
http://localhost:6000/another
http://localhost:6000/another/9/sub
所有这些都应该加载 Home/Index.cshtml 页面,并让 Angular 接管路由。
我看到了向 web.config 文件添加内容的选项,但我不会使用 IIS,所以这不是一个选项
编辑 如果我更新我的路线,它似乎会加载页面和所有 js/css 文件,这很棒。但是,如果我尝试直接进入有角度的路线,则不会加载任何内容。
app.UseMvc(options =>
{
options.MapRoute("Api",
template: "api/{version}/{controller}/{action?}",
defaults: new { version = "v1", controller = "Page" });
options.MapRoute(
name: "default",
template: "{controller}/{action?}",
defaults: new { controller = "Home", action = "Index" });
});
编辑 2
public void Configure(IApplicationBuilder app, IServiceProvider serviceProvider)
{
// add automapper registrations
app.RegisterMappingFiles();
// Enable all static file middleware
app.UseStaticFiles();
// Enable Mvc for controllers
app.UseMvc(options =>
{
options.MapRoute(
name: "default",
template: "{controller}/{action?}",
defaults: new { controller = "Home", action = "Index" });
});
}
【问题讨论】:
-
你确定所有的 URL 都应该映射到 MVC 中的主页吗?也许只映射一个控制器/动作会更好。任何其他 URL 都应该通过 HTTP 响应重定向到操作的正确 URL?
-
我只希望用户能够加载一个角度路由,例如 /pages/9 并且它将加载 Home/index.cshtml 页面,然后 Angular 将在客户端上加载正确的路由
标签: c# asp.net asp.net-mvc asp.net-core