我有一個在Content-type頭中使用帶application/json
的請求調用的操作。這些請求會自動創建一個試圖反序列化請求內容的JsonValueProvider。當json格式不正確時,值提供程序會拋出一個導致應用程序錯誤頁面的異常。ASP.NET MVC 4:由JsonValueProvider引起的句柄異常
要重現此行爲,只需將POST無效json數據發送到作爲Content-type標頭髮送application/json
的操作即可。這將觸發異常。
[編輯]
不需要太多的代碼。只需創建一個空的控制器方法,並使用Firefox「Poster」之類的工具向操作發送無效請求。
public class HomeController
{
public ActionResult Index()
{
return this.Json(true);
}
}
然後用海報:
- 集內容類型,以
application/json
- 設置請求內容
{"This is invalid JSON:,}
- 將請求發送
的結果將是全標準的ASP.NET HTML錯誤頁面(通用或自定義,取決於您的應用程序)。
[/編輯]
因爲我的動作是由嵌入式設備叫,我想發送的,而不是HTML錯誤頁面的短響應。我希望能夠創建一個狀態碼爲500的響應,內容類型爲:text/plain
,以及異常消息爲內容。
我已經嘗試過一個自定義模型聯編程序和一個自定義錯誤處理程序屬性,但既然在處理管道中發生異常,它們都不會被調用。有沒有辦法來處理這個錯誤?
作爲一種解決方法,我目前禁用整個應用程序的JsonValueProvider,並自己從請求正文加載值。如果有一種方法可以在每個操作的基礎上禁用JsonValueProvider,這也會有所幫助。
在此先感謝您的指點!
你能不能從您的代碼後的一些樣品? –