AngularJs路由,MVC6/vNext/.NET5和MVC视图

本文关键字:MVC 视图 NET5 vNext MVC6 AngularJs 路由 | 更新日期: 2023-09-27 18:17:44

在MVC6/vNext/中使用AngularJs的所有示例。NET5都使用位于目录中的静态index.html文件。这样做了,但我现在需要加载一个MVC索引。而不是CSHTML页面,所以我可以注入设置,在我的配置。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,用户可以访问像

这样的url
http://localhost:6000/page
http://localhost:6000/page/9
http://localhost:6000/another
http://localhost:6000/another/9/sub

所有这些都应该加载Home/Index。CSHTML页面,让angular接管路由。

我已经看到了一个选项添加到web。但我不会使用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" });
    });
}

AngularJs路由,MVC6/vNext/.NET5和MVC视图

我认为,您没有在请求管道中添加使用静态文件,因此请求针对它们,处理MVC路由:

    public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
    {
        app.UseStaticFiles();
        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" });
        });
    }

你的调用app.UseStaticFiles()必须在调用app.UseMvc()之前定位,对静态文件的请求不会到达路由中间件,因为调用中间件按注册顺序执行。

docs.asp.net文档