簡體   English   中英

更改 ASP.NET MVC 請求驗證響應

[英]Change ASP.NET MVC request validation response

我喜歡 ASP.NET MVC 5 的請求驗證功能。 我想保留它。 但是,它總是會導致將內部錯誤 (500) 響應返回給客戶端。 這不太對。 真正的問題是,這是一個糟糕的請求! 我想返回一個錯誤請求 (400) 狀態代碼,並且可能是一個更好看的錯誤頁面。

雖然我已經找到了大量關於禁用請求驗證或實現您自己的自定義驗證邏輯的有用信息,但在我的所有搜索中,我還沒有找到一種在驗證失敗后自定義響應的方法。

我怎么做? 是否可以?

編輯:我不是在談論模型驗證,我在談論 請求驗證

在我看來,如果 ASP.NET內部遇到請求中的任何可疑字符,它確實會返回錯誤請求 (400) 錯誤代碼。 例如,當 ASP.NET 嘗試根據請求路徑選擇控制器/動作時,如果路徑包含可疑字符,它將返回 400 錯誤代碼。

因此,當我的代碼還沒有執行時,ASP.NET 會正確處理它。

內部服務器 (500) 錯誤代碼僅在我的代碼遇到可疑字符時發生。 例如,當我寫...

var queryStringKeys = Request.QueryString.AllKeys.ToArray();

...如果查詢字符串包含可疑字符,則QueryString屬性會拋出HttpRequestValidationException 不處理該異常會使 ASP.NET 返回 500 錯誤(就像任何其他未處理的異常一樣)。

所以正確的處理方式是使用try/catch語句,在catch塊中,自己返回一個Bad Request響應。 我想您還可以設置某種過濾器,該過濾器還可以為您全局處理HttpRequestValidationException

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM