Angular 2 - 使用ASP.NET MVC进行路由

Angular 2 - 使用ASP.NET MVC进行路由

问题描述:

我想用AngularJS 2使用ASP.NET MVC(不是核心),并且有一些路由问题。Angular 2 - 使用ASP.NET MVC进行路由

首先在RouteConfig.cs,我有以下途径定义

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

// when the user types in a link handled by client side routing to the address bar 
// or refreshes the page, that triggers the server routing. The server should pass 
// that onto the client, so Angular can handle the route 
routes.MapRoute(
    name: "spa-fallback", 
    url: "{*url}", 
    defaults: new { controller = "Home", action = "Index" } 
); 

在我app.route.ts(角路由),我刚才定义了几个路线。我的默认路由重定向到像

export const router: Routes = [{ 
     path: '', 
     redirectTo: 'auctions/e231', 
     pathMatch: 'full' 
    }, 
    { 
     path: 'auctions/:id', 
     component: AuctionComponent, 
     children: [] 
    } 
]; 

它加载角的应用和缺省路由我app.route.ts重定向我的另一条路线。当我运行应用程序,我的服务器的路由/首页/指数送达了罚款到拍卖/ E231和我的浏览器的最终URL变得

http://localhost:53796/auctions/e231 

一切正常,但是当我刷新页面以这样的URL,我得到的资源服务器错误未找到,这也是预料之中,因为它会寻找名为Auctions的控制器不存在于MVC中。我想知道为什么我在RouteConfig.cs中的spa-fallback路由没有找到?在asp.net mvc中,还有更好的方法来处理这种情况,因为我想能够使用我的一些MVC控制器的操作,例如/ Account/Login等。

+0

为什么你不使用从服务器端和客户端的另一个路由?我的意思是让剃须刀加载主视图,并从HTML和JS让角路由器的作品? –

+0

使用asp.net MVC(作为用户界面)和angular2并不是一个好主意。 –

+0

@HassanFalahi是的,但当时的要求是这样的使用身份服务器,并使用内置的模板进行用户管理 –

虽然不是我认为最好的方法,但仍然工作。我使用我的路线中的约束条件进行工作。我更新了我的默认路由为:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    constraints: new { controller = "Home|Account|Upload|Resource" } // this is basically a regular expression 
); 

我只有4个MVC控制器(主页,帐户,上传,资源)。我的spa回退路由是默认的,所以如果我们输入除这些控制器名称以外的任何东西,angular会尝试使用默认的/ Home/Index服务器路径在其路由中找到它。

我希望它可以帮助别人。

问题是,当您刷新页面时,将使用第一条路由,因为它会尝试获取名称拍卖的控制器。如果你删除了第一个路由配置(默认)并且只使用了第二个(spa-fallback),那么它就可以正常工作,这就是我在项目中使用的方式,只有在你想重定向到其他mvc路由之前放置spa-fallback mvc控制器。

+0

如果我可以给你更多upvotes ... – JenonD

+0

什么是救生员,一直在寻找这种解决方案很长时间。谢谢一堆 –