Razor pages показывает пустую страницу при изменении Request.Path с промежуточным ПО - PullRequest
0 голосов
/ 30 сентября 2018

Я использую промежуточное программное обеспечение для поддоменов.Промежуточное программное обеспечение изменяет Request.Path следующим образом:

URL:

http://sub1.example.com

Request.Path:

/SubdomainPages/sub1

Это работает.Но когда URL содержит страницу (например, http://sub1.example.com/SomePage), я получаю пустую страницу.И когда я использую NotFound() результат действия в обработчике OnGet, происходит то же самое (у меня /Pages/Errors/404.cshtml).

Когда я не использую промежуточное ПО, страницы и страницы перенаправления ошибок с NotFound() работают хорошо.

Это промежуточное ПО поддоменов:

public class SubdomainRoutingMiddleware
{
    private readonly RequestDelegate _next;

    public SubdomainRoutingMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        string[] Subdomains = new string[] { "sub1", "sub2" };
        var parts = context.Request.Host.Value.Split('.');
        if (parts.Length > 2)
        {
            if (Subdomains.Contains(parts[0]))
            {
                if (context.Request.Path.Value != "/")
                    context.Request.QueryString = context.Request.QueryString.Add("sayfa", context.Request.Path.Value.Substring(1));
                context.Request.Path = "/SubdomainPages/" + parts[0];
            }
        }

        await _next.Invoke(context);

    }
}

А это файл Startup.cs:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseBrowserLink();
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
        }

        app.UseStatusCodePages();

        app.UseStatusCodePagesWithReExecute("/Errors/{0}");

        app.UseStaticFiles();

        app.UseMiddleware<SubdomainRoutingMiddleware>();

        app.UseMvc();
    }
}

РЕДАКТИРОВАТЬ:

Request.Path измененс промежуточным программным обеспечением, когда URL содержит страницу, путь становится следующим:

URL:

http://sub1.example.com/SomePage

Request.Path:

/SubdomainPages/sub1/SomePage

/SomePage существует, но /SubdomainPages/sub1/SomePageне существует.Это часть ошибки.

Я также добавил app.UseStatusCodePages() к Startup.cs.Но все равно не работает / вызывает страницу 404, когда URL содержит поддомен.И не отображается сообщение о статусе, как Status Code: 404; Not Found.По-прежнему отображается пустая страница.

1 Ответ

0 голосов
/ 02 октября 2018

Я нашел решение.

Я также изменил Request.Host в промежуточном программном обеспечении.Теперь все работает, как я ожидал.

    public async Task Invoke(HttpContext context)
    {
        string[] Subdomains = new string[] { "sub1", "sub2" };
        var parts = context.Request.Host.Value.Split('.');
        if (parts.Length > 2)
        {
            if (Subdomains.Contains(parts[0]))
            {
                if (context.Request.Path.Value != "/")
                    context.Request.QueryString = context.Request.QueryString.Add("sayfa", context.Request.Path.Value.Substring(1));
                context.Request.Path = "/SubdomainPages/" + parts[0];
                // Change host (without subdomain)
                context.Request.Host = new HostString("example.com");
            }
        }

        await _next.Invoke(context);

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...