Для https://docs.microsoft.com
, он использовал функцию перенаправления URL для реализации маршрута от https://docs.microsoft.com/aspnet/core/fundamentals/localization?view=aspnetcore-2.2
до https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-2.2
.Если вы проверите журнал запросов на https://docs.microsoft.com/aspnet
, вы найдете первый запрос, он возвращает ответ с Status Code: 301
, а затем возвращает https://docs.microsoft.com/en-us/aspnet
.
По вашему требованию, если вам нужно только localhost:5001/home/index
, чтобы вернуть представление с localhost:5001/en-us/home/index
без изменения URL-адреса на localhost:5001/en-us/home/index
.Вы можете попробовать
var localizationOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>().Value;
var requestProvider = new RouteDataRequestCultureProvider();
localizationOptions.RequestCultureProviders.Insert(0, requestProvider);
app.UseRouter(routes =>
{
routes.MapMiddlewareRoute("{culture=en-US}/{*mvcRoute}", subApp =>
{
subApp.UseRequestLocalization(localizationOptions);
subApp.UseMvc(mvcRoutes =>
{
mvcRoutes.MapRoute(
name: "default",
template: "{culture=en-US}/{controller=Home}/{action=Index}/{id?}");
});
});
});
Если вам нужен такой же URL-адрес, как и localhost:5001/en-us/home/index
, вам также необходимо выполнить действие перенаправления.
app.Use(async (context, next) =>
{
await next.Invoke();
if (context.Response.StatusCode == StatusCodes.Status404NotFound)
{
context.Response.Redirect(@"/en-us/Home/Index", true);
}
});
app.UseRouter(routes =>
{
routes.MapMiddlewareRoute("{culture}/{*mvcRoute}", subApp =>
{
subApp.UseRequestLocalization(localizationOptions);
subApp.UseMvc(mvcRoutes =>
{
mvcRoutes.MapRoute(
name: "default",
template: "{culture}/{controller=Home}/{action=Index}/{id?}");
});
});
});