ZetCode

ASP.NET RedirectToAction

最后修改于 2025 年 4 月 3 日

在本文中,我们将探讨 ASP.NET 8 中的 RedirectToAction 方法。此方法对于将用户重定向到 MVC 应用程序中的不同操作至关重要。

ASP.NET 是一个跨平台、高性能的框架,用于构建现代 Web 应用程序。RedirectToAction 有助于管理控制器之间的应用程序流。

基本定义

RedirectToAction 是 ASP.NET MVC 中的一种方法,它返回一个 RedirectToActionResult。此结果会执行到指定操作和控制器的 HTTP 重定向。

执行时,它会向客户端发送一个 302 Found 响应,指示浏览器向指定的操作发出新请求。这可以维护正确的应用程序流。

RedirectToAction 通常在 Post-Redirect-Get (PRG) 模式中使用,以防止重复提交表单。它有助于将操作处理与结果显示分开。

ASP.NET RedirectToAction 示例

以下示例演示了一个使用 RedirectToAction 的基本 MVC 控制器。

Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();

var app = builder.Build();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

这设置了一个基本的 ASP.NET MVC 应用程序,并支持控制器。MapControllerRoute 方法定义了默认路由模式。

Controllers/AccountController.cs
using Microsoft.AspNetCore.Mvc;

public class AccountController : Controller
{
    private static List<User> _users = new()
    {
        new User(1, "john", "john@example.com"),
        new User(2, "jane", "jane@example.com")
    };

    [HttpGet]
    public IActionResult Login()
    {
        return View();
    }

    [HttpPost]
    public IActionResult Login(string username, string password)
    {
        // Authentication logic would go here
        var user = _users.FirstOrDefault(u => 
            u.Username == username);
            
        if (user == null)
        {
            TempData["ErrorMessage"] = "Invalid credentials";
            return RedirectToAction("Login");
        }

        // Successful login
        return RedirectToAction("Profile", new { id = user.Id });
    }

    [HttpGet]
    public IActionResult Profile(int id)
    {
        var user = _users.FirstOrDefault(u => u.Id == id);
        if (user == null) return NotFound();
        return View(user);
    }

    [HttpPost]
    public IActionResult UpdateProfile(int id, string email)
    {
        var user = _users.FirstOrDefault(u => u.Id == id);
        if (user == null) return NotFound();

        // Update logic would go here
        return RedirectToAction("Profile", new { id = id });
    }
}

public record User(int Id, string Username, string Email);

此控制器演示了使用 RedirectToAction 的三种不同场景。登录 POST 操作在失败时重定向回登录,在成功时重定向到个人资料。

UpdateProfile 操作展示了在处理后如何将参数重定向回同一操作。这遵循 PRG 模式以防止重复提交。

TempData 字典用于在重定向之间传递数据。这对于仅应显示一次的错误消息特别有用。

该示例展示了 RedirectToAction 如何维护干净的 URL 和正确的 HTTP 语义。每次重定向都清楚地指示了应用程序流程中的下一步。

来源

Microsoft ASP.NET MVC Actions 文档

在本文中,我们探讨了 ASP.NET 8 中的 RedirectToAction 方法。此强大功能有助于维护正确的应用程序流和 URL 语义。

作者

我叫 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面有十多年的经验。

列出所有 ASP.NET 教程