Технология:
- 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 Framework.
Вопрос, , почему нам нужно указывать этот маршрут? Если мы просто используем 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 вернуть его?
Важно: в основном проблема связана с тем, как заставить индекс возвращаться, поэтому наш клиентский каркасный маршрутизатор обрабатывает изменения, а бэкэнд возвращает определенное состояние просмотра.