В моем решении установлено следующее 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-запроса?