Есть 2 домена(.com и .ru) и 2 URL как
mysite.com/about-us и
mysite.ru/o-nas которые должны возвращать одну и ту же страницу AboutUs.cshtml (Razor Page). Также определенный URL должен соответсвовать своему домену: /about-us для
.com и mysite.ru/o-nas для
.ru. Например:
site.COM/o-nas не должен работать и возвращать Not Found(404)
site.RU/about-us не должен работать и возвращать Not Found(404)
Сайт как указано в вопросе сделан на Razor Pages. Я нашел решение с Filters и оно работает, но
оба фильтра срабатывают и для
site.com/about-us и для
site.ru/o-nas . Можно ли как-то сделать, чтобы только 1 фильтр срабатывал для каждого из 2х выше описанных URL. Это возможно?
Заранее спасибо, мой код ниже:
public static class DomainFilters
{
public static IPageApplicationModelConvention DomainEng(this PageConventionCollection con, string pageName, string route="")
{
return con.AddPageApplicationModelConvention(pageName, model =>
{
model.Filters.Add(new EnglishActionFilter(route));
});
}
public static IPageApplicationModelConvention DomainRussian(this PageConventionCollection con, string pageName, string route = "")
{
return con.AddPageApplicationModelConvention(pageName, model =>
{
model.Filters.Add(new RussianActionFilter(route));
});
}
}
public class EnglishActionFilter : IResultFilter
{
public void OnResultExecuting(ResultExecutingContext context)
{
if (context.HttpContext.Request.Host.ToString().Contains(".ru"))
{
context.Result = new NotFoundResult();
}
}
public void OnResultExecuted(ResultExecutedContext context) { }
}
public class RussianActionFilter : IResultFilter
{
public void OnResultExecuting(ResultExecutingContext context)
{
if (context.HttpContext.Request.Host.ToString().Contains(".com"))
{
context.Result = new NotFoundResult();
}
}
public void OnResultExecuted(ResultExecutedContext context){}
}
Также код для ConfigureServices из Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.DomainEng("/AboutUs", "about-us");
options.Conventions.DomainRussian("/AboutUs", "o-nas");
}