AngularJs Routing,MVC6 / vNext / .NET5和MVC View

时间:2015-10-15 08:23:32

标签: c# asp.net asp.net-mvc asp.net-core

将AngularJs与MVC6 / vNext / .NET5一起使用的所有示例都使用wwwroot中的静态index.html文件。完成,但我现在需要加载一个MVC index.cshtml页面,所以我可以将我的config.json中的设置注入页面。

我想要的只是一个默认页面(Home),如果url不是js / css文件或者是api控制器,那么无论加载什么url都会被加载。

我尝试将此添加到我的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,用户可以访问

等网址
http://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" });
    });

}

1 个答案:

答案 0 :(得分:3)

我认为,您还没有在请求管道中添加使用静态文件,因此请求它们,处理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.UseMvc()之前,必须找到你的调用app.UseStaticFiles(),因为调用静态文件没有到达路由中间件,因为调用按注册顺序执行的中间件。

Documentaion on docs.asp.net