如何在ASP.Net Core Razor Pages上进行重定向

52

我正在使用ASP.Net Core 2中的新Razor Pages
现在我需要重定向

我尝试了这个,但是页面没有重定向:

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

        Redirect(url);
    }
}

如何进行重定向?

5个回答

79

你很接近了。这些方法需要返回一个 IActionResult (对于异步方法则为 Task<IActionResult>),然后你需要返回重定向。

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

    return Redirect(url);
}

Razor Pages 文档

然而,由于您未对 redirect_url 变量进行验证,因此存在严重的开放式重定向攻击风险。 请不要将此代码用于生产环境


1
现在您可以使用 LocalRedirect 来避免安全问题。 - John
我不建议使用带有描述“此类型/成员支持.NET Framework基础结构,不应直接从您的代码中使用”的方法。 - Erik Philips

42

您可以使用IActionResult返回重定向而不是请求的页面。

public IActionResult OnGet()
{
     if (!Auth())
     {
         return new RedirectToPageResult("/Portal/Login");
     }
     return Page();
}

8
你可以使用这段代码来完成它:
  public async Task OnGetAsync()
  {
    Response.Redirect("/Panel");
  }

7

对于没有cs的页面也是一样:

@page

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

        return Redirect(url);
    }
}

0

你可以直接在 Razor 视图中使用这个。

    @{
if (!Context.Request.Path.Value.Contains("Identity/Account/UserMustChangePassword"))
{
     Context.Response.Redirect("Identity/Account/UserMustChangePassword");
}
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接