MVC6路由,SPAfallback+404错误页面使用ASP.NETCore1.0的MVC6的RC1,可以从Startup调用app.UseMvcRoutes是映射到.Configure函数中。我已经映射了一个“spa-fallback”路由,它将确保HomeController和Index视图是默认的,如下所示:UseExceptionHandler("/主页/错误");app.UseStatusCodePagesWithRedirects("/Home/Error/{0}");app.UseMvc(routes=>{routes.MapRoute("default","{controller=Home}/{action=Index}/{id?}");routes.MapRoute("spa-fallback","{*anything}",new{controller="Home",action="Index"});routes.MapWebApiRoute("defaultApi","api/{controller}/{id?}");});我想要回退,以便我的Angular2应用程序的路由不会导致HTTP状态代码404,未找到。但是,当用户无意中尝试导航到不存在的页面视图时,我还需要正确处理。您可能会注意到我还调用了app.UseStatusCodePagesWithRedirects("/Home/Error/{0}");.使用状态代码和“spa-fallback”路由重定向到我的错误页面的调用似乎是相互排斥的——这意味着我似乎只能拥有一个或另一个(但遗憾的是不能同时拥有)。有谁知道如何两全其美?我花了一段时间才弄清楚如何在不使用MVC提供索引的情况下执行此操作,并且仍然会因丢失文件而得到404。这是我的http管理:publicvoidConfigure(IApplicationBuilderapp,IHostingEnvironmentenv,ILoggerFactoryloggerFactory){app.UseDefaultFiles();app.UseStaticFiles();app.UseMvc(routes=>{routes.MapRoute(name:"api",template:"api/{controller}/{action}/{id?}");//##注释掉因为我不想使用MVC为我的索引提供服务。//routes.MapRoute(//name:"spa-fallback",//template:"{*anything}",//defaults:new{controller="Home",action="指数”});});//##当MVC不处理不包含文件扩展名的路由时,这为wwwroot文件夹中的index.html提供服务。//##如果路由包含“.”,将返回404。app.MapWhen(context=>context.Response.StatusCode==404&&!Path.HasExtension(context.Request.Path.Value),branch=>{branch.Use((context,next)=>{context.Request.Path=newPathString("/index.html");Console.WriteLine("路径更改为:"+context.Request.Path.Value);returnnext();});分支.UseStaticFiles();});我提出了两种可能的解决方法/解决方案ASP.NETCore1.0,RC1和Angular2,我们可以简单地换掉LocationStrategy。例如,在我的wwwroot/app/boot.ts中,我有以下内容:import{provide}from"angular2/core";从“angular2/平台/浏览器”导入{bootstrap};从“angular2/router”导入{LocationStrategy、HashLocationStrategy、ROUTER_PROVIDERS};从“angular2/http”导入{HTTP_PROVIDERS};从“./app.component”导入{AppComponent}bootstrap(AppComponent,[ROUTER_PROVIDERS,HTTP_PROVIDERS,provide(LocationStrategy,{useClass:HashLocationStrategy})]);请注意,我使用provide函数用HashLocationStrategy覆盖标准LocationStrategy。这会向URL添加#并防止MVC错误地抛出404,而且当用户手动键入不存在的URL时也能正确处理404响应。ASP.NETCore1.0,RC2只使用Microsoft.AspNet.NodeServices。在这个库中有AngularServices和ReactServices允许通过MapSpaFallbackRoute函数专门映射SPA路由。我声明我们需要等待RC2,同时理解当前的实现并不能完全按预期工作。试试这个:publicvoidConfigure(IApplicationBuilderapp,IHostingEnvironmentenv,ILoggerFactoryloggerFactory){app.UseExceptionHandler("/Home/Error");app.UseStatusCodePagesWithRedirects("/Home/Error/{0}");app.UseMvc(routes=>{routes.MapRoute("default","{controller=Home}/{action=Index}/{id?}");routes.MapWebApiRoute("defaultApi","api/{controller}/{ID?}”);});app.Run(asynccontext=>{context.Response.Redirect("/Home/Index");awaitTask.CompletedTask;});}app.Run()将捕获与之前定义的所有未被任何路由匹配的请求。通过这种方式,您可以获得自定义spa回退并同时使用app.UseStatusCodePagesWithRedirects()。以上就是C#学习教程的全部内容:MVC6路由、SPA备份+404错误页面分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
