You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AuthorizeRouteView时如何获取重定向前的原始目标页面

如何在Blazor中获取用户原访问页面并登录后重定向回去

你完全没必要用那种扒RouteAttribute的方式,其实有更简单、更可靠的方法——直接利用NavigationManager就能拿到用户当前试图访问的完整路径。

优化后的RedirectToLogin组件

直接修改你的RedirectToLogin类,用NavigationManager的内置方法获取原路径:

public class RedirectToLogin : ComponentBase
{
    [Inject]
    protected NavigationManager NavigationManager { get; set; }

    protected override void OnInitialized()
    {
        // 把完整URL转换成相对应用基路径的相对地址,自动剔除域名等无关内容
        string returnUrl = NavigationManager.ToBaseRelativePath(NavigationManager.Uri);
        
        // 将原路径作为参数拼接到登录地址中
        string loginUrl = QueryHelpers.AddQueryString("/account/login", "redirect_url", returnUrl);
        
        NavigationManager.NavigateTo(loginUrl);
    }
}

为什么你的原方法不够理想

你之前通过RouteData.PageType.GetCustomAttributes获取路由模板的方式存在几个明显缺陷:

  • 只能拿到路由模板(比如/product/{id}),但用户实际访问的是带具体参数的路径(比如/product/123),这种方式会丢失关键的路由参数
  • 如果页面配置了多个RouteAttribute,或者使用了约定式路由,这种解析方式会直接失效,通用性很差

登录完成后的重定向处理

登录成功后,只需要从登录页面的查询参数里取出redirect_url,再跳转回去即可:

// 登录逻辑执行完成后
var queryParams = QueryHelpers.ParseQuery(NavigationManager.Uri);
if (queryParams.TryGetValue("redirect_url", out var redirectUrl) && !string.IsNullOrEmpty(redirectUrl))
{
    NavigationManager.NavigateTo(redirectUrl);
}
else
{
    // 如果没有指定跳转地址,默认跳转到首页
    NavigationManager.NavigateTo("/");
}

这样整个流程既可靠又简洁,完全不需要去手动解析路由属性~

内容的提问来源于stack exchange,提问作者kerry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:17:32