[英]ASP.NET Core 2.1: Navigating back to a page after an HTTP POST fails validation displays a browser error
问题:
使用ASP.NET Core 2.1 MVC项目,我使用浏览器后退按钮返回到表单后收到以下浏览器错误消息,其中表单POST失败服务器端验证:
Firefox中的错误消息:
文件已过期
该文档不再可用。
Firefox的缓存中不提供所请求的文档。
- 作为安全预防措施,Firefox不会自动重新请求敏感文档。
- 单击“重试”以从网站重新请求文档。
Chrome中的错误消息:
确认重新提交表单
此网页需要您之前输入的数据才能正确显示。 您可以再次发送此数据,但通过这样做,您将重复此页面之前执行的任何操作。
按重新加载按钮重新提交加载页面所需的数据。
ERR_CACHE_MISS
重现步骤:
笔记:
它似乎与Antiforgery系统禁用的响应缓存( https://docs.microsoft.com/en-us/aspnet/core/performance/caching/middleware?view=aspnetcore-2.1 )有关。
用于生成安全令牌以防止跨站点请求伪造(CSRF)攻击的Antiforgery系统将Cache-Control和Pragma标头设置为no-cache,以便不缓存响应。 有关如何禁用HTML表单元素的防伪标记的信息,请参阅ASP.NET Core防伪配置。
我可以确认,如果从HTML表单中删除@Html.AntiForgeryToken()
,浏览器错误消息就会消失。
这在使用AntiForgeryToken
ASP.NET MVC5中不是问题。
题:
在ASP.NET Core 2.1中 ,有没有人找到一种方法来继续使用Antiforgery系统并防止在使用浏览器后退按钮时显示此浏览器错误消息?
这是我的POST动作:
[HttpPost]
[ValidateAntiForgeryToken]
[ActionName("Contact-Form")]
public async Task<ActionResult> ContactForm(ContactFormViewModel cfvm)
{
if (ModelState.IsValid)
{
// << Handling of the form submit code here >>
TempData["Success"] = string.Format("Your contact request was submitted successfully!");
return RedirectToAction("Contact-Form-Success");
}
TempData["Error"] = "The form did not submit successfully. Please verify that all of the required fields are filled.";
return View();
}
更新:
我在ASP.NET核心文档上发布了这个问题: https : //github.com/aspnet/Docs/issues/7590
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.