如何在 ASP.Net Core Razor 页面上重定向

Posted

技术标签:

【中文标题】如何在 ASP.Net Core Razor 页面上重定向【英文标题】:How to redirect on ASP.Net Core Razor Pages 【发布时间】:2018-10-21 06:11:27 【问题描述】:

我在 ASP.Net core 2 中使用新的 Razor 页面 现在我需要重定向

我试过了,但是页面没有重定向:

public class IndexModel : PageModel

    public void OnGet()
    
        string url = "/.auth/login/aad?post_login_redirect_url=" + Request.Query["redirect_url"];

        Redirect(url);
    

如何重定向?

【问题讨论】:

【参考方案1】:

你们很亲密。这些方法需要返回一个IActionResult(或Task<IActionResult> 用于异步方法),然后您需要返回重定向。

public IActionResult OnGet()

    string url = "/.auth/login/aad?post_login_redirect_url=" 
      + Request.Query["redirect_url"];

    return Redirect(url);

Razor pages documentation

但是,您有一个巨大的 Open Redirect Attack,因为您没有验证 redirect_url 变量。 请勿在生产环境中使用此代码

【讨论】:

【参考方案2】:

您可以使用 IActionResult 返回重定向或您的剃须刀页面。

public IActionResult OnGet()

     if (!Auth())
     
         return new RedirectToPageResult("/Portal/Login");
     
     return Page();

【讨论】:

【参考方案3】:

没有cs的页面也一样:

@page

@functions

    public IActionResult OnGet()
    
        string url = "/.auth/login/aad?post_login_redirect_url=" 
          + Request.Query["redirect_url"];

        return Redirect(url);
    

【讨论】:

【参考方案4】:

您可以使用以下代码进行操作:

  public async Task OnGetAsync()
  
    Response.Redirect("/Panel");
  

【讨论】:

以上是关于如何在 ASP.Net Core Razor 页面上重定向的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET Core 2.0 Razor 页面中填充下拉列表

如何在 ASP.NET Core Razor 页面中绑定复杂列表

如何使用 ASP.NET Core Razor 页面预选下拉列表中的项目

如何使用 Url.Action 在 asp.net core 2.0 razor 页面中传递多个操作

Asp.net Core 3.1-如何从控制器返回到 Razor 页面?

如何在 asp.net core .NET6(Razor 页面)中的单个 cshtml 中显示来自多个表/模型的数据