asp.net-core-mvc – MVC6路由到单页面应用程序而不会丢失404
我正在用angular2和MVC5编写单页应用程序.不过,我对两者都很陌生,而且我在路由方面遇到了麻烦.
我想将网址匹配为: > / – >转到我的索引页面,它引导角度 第二点很容易,如果我愿意放弃404返回,我可以让客户端路由工作,但我似乎无法调和它. 看起来应该这样: app.UseStaticFiles(); app.UseMvc(routes => { routes.MapRoute( name: "api",template: "api/{controller}/{id?}"); routes.MapRoute( name: "spa",template: "{*anythingelse}",defaults: new { controller = "Home",action = "Index" }); }); 和: @RouteConfig([ { path: "/",name: 'Splash',component: SplashView },{ path: '/accounts/login',name: 'Login',component: LoginView },{ path: '/accounts/register',name: 'Registration',component: RegistrationView },{ path: '/home/...',name: 'Home',component: HomeView },]) 但是,这只是为每个不是静态文件的请求提供Index.cshtml. 我觉得这已经是一个已经解决的问题,但我无法在网上找到任何关于它的信息.如何正确地做到这一点? 我使用的是“HTML5”风格的路径,而不是散列风格. 解决方法
所以有两种方法可以做到这一点.如果您正在使用HashLocationStrategy,我强烈建议您在服务器端实现这样做,因为我发现它更容易处理.
否则,您可以创建自己的RouterOutlet组件来处理异常.我不是100%清楚如何让它与你的RouterConfig一起工作,因为我没有深入研究路由方面,但我打赌你可以看到是否存在路由然后去那里否则404错误.这是我的代码,用于查看用户是否使用Json Web令牌登录. import {Directive,Attribute,ElementRef,DynamicComponentLoader} from 'angular2/core'; import {Router,RouterOutlet,ComponentInstruction} from 'angular2/router'; @Directive({ selector: 'router-outlet' }) export class LoggedInRouterOutlet extends RouterOutlet { publicRoutes: any; private parentRouter: Router; constructor(_elementRef: ElementRef,_loader: DynamicComponentLoader,_parentRouter: Router,@Attribute('name') nameAttr: string) { super(_elementRef,_loader,_parentRouter,nameAttr); this.parentRouter = _parentRouter; } activate(instruction: ComponentInstruction) { if (!localStorage.getItem('jwt') || !tokenNotExpired('jwt')) {//Public Routes does not work with Hash Location Strategy,need to come up with something else. // todo: redirect to Login,may be there is a better way? if(localStorage.getItem('jwt')){ localStorage.removeItem('jwt'); } this.parentRouter.navigate(['Login']); } return super.activate(instruction); } } 正如您所看到的,我处理了对Token的检查,如果他们没有令牌,他们只能进入我的登录页面.然后在你的app.component或你的bootstrapped组件中使用它作为你的路由器插座而不是原来的. 对不起,我不能提供更多帮助,但我希望这能让你指出正确的方向! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 将大型实体列表映射到ViewModels的PagedLis
- asp.net – 动态禁用jQuery Datepicker Icon
- asp.net – odbc连接的连接字符串是什么?
- asp.net – FormsAuthentication.SetAuthCookie()是否创建一
- asp.net-mvc-4 – 如何为Outlook创建“互联网日历订阅”?
- asp.net-core-1.0 – ASP.NET Core 1.0中的package.json
- asp.net – 在使用预编译的Razor视图和VirtualPathProvider
- asp.net-mvc – 为什么POST会在MVC 4中引发异常?
- asp.net-mvc – 使用源代码的Real World ASP.NET MVC应用程
- asp.net-mvc – 使用ViewModels,EditModels和AutoMapper参考
- asp.net – 下拉列表和字段验证引起了骚乱
- asp.net-web-api – ASP.NET Web API – 具有多个
- asp.net-mvc – 帮助/提示提高我的ASP.NET MVC 2
- asp.net-mvc-3 – 在Razor视图中显示List元素
- asp.net – 是否可以在Windows8上安装IIS 7.5或7
- ASP.NET MVC,Ninject,每个请求多个构造函数的单个
- 实体框架 – 实体框架生成的类不在我需要的命名空
- 一步一步创建ASP.NET MVC5程序[Repository+Autof
- 如何将我的模型数据(列表)映射到另一个viewmodel
- Asp.Net Identity发现用户不在角色中