@ErichZann

Вызвать только 1 фильтр из нескольких для определенного Razor Pages Route?

Есть 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");
        }
  • Вопрос задан
  • 40 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы