问题: 在ASP.NET中使用POST-REDIRECT-GET模式时,可能会遇到以下问题:
解决方法:
示例代码:
在POST请求处理程序中:
[HttpPost]
public ActionResult Create(MyModel model)
{
// 其他逻辑...
// 生成一个GUID并将其存储在Session中
var guid = Guid.NewGuid().ToString();
Session["PRGToken"] = guid;
// 重定向到GET请求
return RedirectToAction("Details", new { prgToken = guid });
}
在GET请求处理程序中:
public ActionResult Details(string prgToken)
{
// 检查Session中的PRGToken
var sessionToken = Session["PRGToken"]?.ToString();
if (prgToken != sessionToken)
{
// 如果PRGToken不匹配,则可能是一个重复的POST请求,
// 在这里可以进行处理或重定向到其他页面
return RedirectToAction("Index");
}
// 删除Session中的PRGToken
Session.Remove("PRGToken");
// 继续处理GET请求的逻辑
// ...
return View(model);
}
示例代码:
在POST请求处理程序中:
[HttpPost]
public ActionResult Create(MyModel model)
{
if (!ModelState.IsValid)
{
// 验证失败,将模型存储在TempData中
TempData["Model"] = model;
// 重定向到GET请求
return RedirectToAction("Create");
}
// 其他逻辑...
return RedirectToAction("Details");
}
在GET请求处理程序中:
public ActionResult Create()
{
// 从TempData中获取模型数据并回显到表单中
var model = TempData["Model"] as MyModel;
if (model != null)
{
return View(model);
}
return View();
}
通过使用上述解决方法,可以解决ASP.NET中POST-REDIRECT-GET模式可能遇到的问题。
下一篇:ASP.NET中取消任务的问题