Пользовательское правило перезаписи URL-адреса в Blazor ASP.Net Core (на стороне сервера) не срабатывает при использовании navlink

В моем решении установлено следующее IRule:

public class IsUrlEncodedRule : Microsoft.AspNetCore.Rewrite.IRule
{
    public void ApplyRule(RewriteContext context)
    {
        var request = context.HttpContext.Request;
        var host = request.Host;
        Console.WriteLine("Hello world!");
        context.Result = RuleResult.ContinueRules;
    }
}

И тут в моем Startup.cs есть следующее ...

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    ...

    app.UseHttpsRedirection();
    app.UseRewriter(new RewriteOptions().Add(new IsUrlEncodedRule()));  
    app.UseStaticFiles();

    ...

    app.UseMvc();

    ...

}

В конце концов, я хочу, чтобы правило проверяло, что все URL-адреса закодированы, но пока я просто хочу видеть «Hello world» в консоли, чтобы знать, что оно работает, или чтобы оно вообще попало в мои точки останова в правиле. Это серверное приложение Blazor, и прямо сейчас правило срабатывает только тогда, когда вы изначально переходите на сайт или если вы вручную переходите на определенную страницу сайта, набрав URL-адрес на панели навигации в браузере и навигация вручную. Если, однако, вы используете NavLink для навигации по сайту, правило никогда не срабатывает, поскольку клиент никогда не делает никаких дополнительных запросов, поскольку все они обрабатываются через SignalR.

Пример:

<NavLink class="nav-link" href="s3contents">
    <span class="fas fa-bold" aria-hidden="true"></span> S3 Contents
</NavLink>

Если вы уже на веб-сайте, щелкнув эту NavLink, вы перейдете на http://localhost:8080/s3contents, и правило не сработает. Оказавшись там, если вы обновите страницу вручную или скопируете URL-адрес, вставите его в новую вкладку и перейдете к ней, сработает правило . Мой вопрос заключается в том, как настроить свои службы таким образом, чтобы любой IRule, который я внедряю, всегда запускался, даже если на конкретную страницу перешел пользователь уже на веб-сайте, и поэтому переход через SignalR вместо традиционного HTTP-запроса?


person Giardino    schedule 04.12.2019    source источник


Ответы (1)


Перезапись URL-адреса переписывает URL-адрес на сервере при получении HTTP-запроса.
При навигации через SignalR не выполняется HTTP-запрос, поэтому вы не можете использовать перезапись URL-адреса для своего поведения.

Но если целью является захват каждого события навигации, используйте _ 1_. В настоящее время его нельзя отменить, и мы не можем предотвратить навигацию. Но проблема остается открытой https://github.com/aspnet/AspNetCore/issues/14962

person agua from mars    schedule 05.12.2019
comment
А, я вижу, похоже, они хотят добавить это сами в какой-то момент. Спасибо за ссылку на активный выпуск. - person Giardino; 17.12.2019