Я использую ASP.NET Core 3.0 с бритвенными страницами и хочу направить sub1.test.local
на Pages/Sub1
и sub2.test.local
на Pages/Sub2
. Я пробовал создать пользовательское соглашение о страницах, но оно полностью отличается от маршрутов MVC, поэтому я спрашиваю здесь.
Маршрутизация поддоменов в RazorPages ASP.NET Core 3.0
Ответы (1)
Майкл Граф написал об этом.
Сначала вам нужно создать собственный маршрутизатор, переопределив MvcRouteHandler, затем вам нужно использовать этот класс маршрутизатора в своей конфигурации Mvc Routes.
public class AreaRouter : MvcRouteHandler, IRouter
{
public new async Task RouteAsync(RouteContext context)
{
string url = context.HttpContext.Request.Headers["HOST"];
string firstDomain = url.Split('.')[0];
string subDomain = char.ToUpper(firstDomain[0]) + firstDomain.Substring(1);
string area = subDomain;
context.RouteData.Values.Add("area", subDomain);
await base.RouteAsync(context);
}
}
В конфигурации запуска,
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseMvc(routes =>
{
routes.DefaultHandler = new AreaRouter();
routes.MapRoute(name: "areaRoute",
template: "{controller=Home}/{action=Index}");
});
}
person
Derviş Kayımbaşıoğlu
schedule
16.12.2018
страницы razor также используют app.UseMvc, поэтому конфигурация должна быть аналогичной.
- person Derviş Kayımbaşıoğlu; 16.12.2018
@ DervişKayımbaşıoğlu, спасибо за ответ. В моем проекте я разрабатываю мультитенантный веб-сайт, мне нужно отклонить нераспознанных клиентов, чтобы страница возвращала ошибку, если клиент не найден в базе данных,
MvcRouteHandler
подходит ли для этого тоже?
- person Shimmy Weitzhandler; 28.05.2019
MvcRouteHandler в .NET 5: raw.githubusercontent.com/aspnet/Mvc/master/src/
- person Stefan Steiger; 23.11.2020