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等。
虽然不是我认为最好的方法,但仍然工作。我使用我的路线中的约束条件进行工作。我更新了我的默认路由为:
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控制器。
如果我可以给你更多upvotes ... – JenonD
什么是救生员,一直在寻找这种解决方案很长时间。谢谢一堆 –
为什么你不使用从服务器端和客户端的另一个路由?我的意思是让剃须刀加载主视图,并从HTML和JS让角路由器的作品? –
使用asp.net MVC(作为用户界面)和angular2并不是一个好主意。 –
@HassanFalahi是的,但当时的要求是这样的使用身份服务器,并使用内置的模板进行用户管理 –