繁体   English   中英

Blazor ASP.Net Core(服务器端)中的自定义 URL 重写规则在使用导航链接时不会触发

[英]Custom URL rewrite rule in Blazor ASP.Net Core (server-side) not triggering when using 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 并将其粘贴到新选项卡中并导航到它,则将触发该规则。 我的问题是如何配置我的服务,以便即使网站上已有的用户导航到特定页面并因此通过 SignalR 而不是传统的 http 请求导航,我实现的任何IRule也将始终被触发?

当收到 http 请求时,url rewrite 重写服务器中的 url。
通过 SignalR 导航不会发出 http 请求,因此您无法针对您的行为使用 URL 重写。

但如果目标是捕获每个导航事件,请使用NavigationManager.LocationChanged 目前无法取消,我们也无法阻止导航。 但是一个问题是开放的https://github.com/aspnet/AspNetCore/issues/14962

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM