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

Ton*_*ony 15 c# asp.net razor-pages

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

我试过这个,但页面没有重定向:

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

        Redirect(url);
    }
}
Run Code Online (Sandbox Code Playgroud)

如何重定向?

Eri*_*ips 25

你非常接近.这些方法需要返回IActionResult(或Task<IActionResult>异步方法)然后需要返回重定向.

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

    return Redirect(url);
}
Run Code Online (Sandbox Code Playgroud)

剃刀页面文档

但是,您有一个巨大的Open Redirect Attack,因为您没有验证redirect_url变量.不要在生产中使用该代码.


Luc*_*ler 18

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

public IActionResult OnGet()
{
     if (!Auth())
     {
         return new RedirectToPageResult("/Portal/Login");
     }
     return Page();
}
Run Code Online (Sandbox Code Playgroud)


Sho*_*din 9

您可以使用以下代码来做到这一点:

  public async Task OnGetAsync()
  {
    Response.Redirect("/Panel");
  }
Run Code Online (Sandbox Code Playgroud)


A K*_*A K 8

对于没有 cs 的页面也是如此:

@page

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

        return Redirect(url);
    }
}
Run Code Online (Sandbox Code Playgroud)