技术:
- Visual Studio 2017
- Asp.Net Core Tooling 1.1
- .Net Framework 4.6.2
单页应用程序及其与Visual Studio的集成变得更加容易,因为Visual Studio内置了许多新的支持。但是本周早些时候,Jeffery T. Fritz发布了一篇非常好的文章,介绍了使用以下软件包进行集成和实现:
Microsoft.AspNetCore.SpaServices
Microsoft.AspNetCore.NodeServices
在查看了几个模板并进行分析后,您会注意到在解决方案资源管理器中有一个名为ClientApp
的目录。这是通过Webpack配置和路由。
问题出现在Startup.cs
文件中。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
{
HotModuleReplacement = true
});
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapSpaFallbackRoute(
name: "spa-fallback",
defaults: new { controller = "Home", action = "Index" });
});
}
在我们的请求中,有一些路由到我们的MVC框架。
问题是,为什么我们需要指定这个路由? 如果我们只使用 app.UseDefaultFiles()
和 app.UseStaticFiles()
,并在我们的wwwroot中指定我们的索引。 我们的客户端路由器将始终返回。 那么为什么我们不这样做:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
{
HotModuleReplacement = true
});
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseDefaultFiles();
app.UseStaticFiles();
}
我知道我们wwwroot中直接的项目不会被压缩,也可能泄露安全性,但除了这两个缺点之外,为什么不使用这种方法来确保你的主页和客户端路由器不总是返回呢?
我的问题具体是关于强制MVC始终返回Home/Index
或UseDefaultFiles()
/ UseStaticFiles()
的概念。 我错过了什么,为什么我们要强制MVC返回它?
重要提示:基本上,问题的核心是如何强制返回主页,使得我们的客户端路由器来处理更改,而不是后端返回特定的视图状态。