[英]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.