2016-04-14 155 views
2

在我的.Net MVC應用程序中,我需要處理服務器端驗證。如果有什麼問題請我得到這個:ASP.NET MVC處理請求錯誤

{ 
    "validationMessage": message 
} 

用的StatusCode = 200 否則我當然得到響應適當呼叫。我的問題是,我有麻煩檢查驗證消息,然後反序列化響應(我總是得到null,雖然提琴手顯示我的迴應回來)。

public static async Task<Response<T>> Response<T>(HttpResponseMessage response) 
    { 
     var res = new Response<T>(); 

     if (response.IsSuccessStatusCode) 
     { 
      //check for validation messages 
      var serverErrorInfo = await response.Content.ReadAsAsync<ServerError>(); 
      if (serverErrorInfo.ValidationMessage != null) 
      { 
       res.ErrorInfo = new ErrorInfo(serverErrorInfo.ValidationMessage); 
      } 
      else 
      { 
       var result = await response.Content.ReadAsAsync<T>(); 
       res.IsSuccess = true; 
       res.Result = result; 
      } 
      return res; 
     } 

我在做什麼錯了?在第一次嘗試將它讀爲ServerError之後,該響應是否被處理?由於我使用泛型,我不能首先檢查是否有響應,而不是讀取validationMessage。
SERVERERROR代碼:

[JsonObject] 
public class ServerError 
{ 
    public string validationMessage{ get; set; } 
} 

回答

0

最終的解決方案只是用一些醜陋的代碼:

var serverErrorInfo = JsonConvert.DeserializeObject<ServerError>(await response.Content.ReadAsStringAsync()); 

我很不清楚爲什麼ReadAsAsync失敗出現。

2

可能是一個反序列化的問題。你是否在JSON響應中使用了大寫字母V的ValidationMessage?另外,serverErrorInfo完全爲null,還是隻是屬性ValidationMessage爲null?你能否在ServerError反序列化之前檢查response.Content的值是什麼?

+0

不幸的是整個ServerErrorInfo對象爲null。一旦我沒有條件地切換訂單(只是首先將其作爲響應對象讀取,然後將其作爲一個錯誤,我在puropose上創建錯誤的請求)。內容不會被反序列化爲響應(這是顯而易見的,因爲沒有任何反序列化,但也不會反序列化狀態消息。使用套管也沒有幫助。當我嘗試ReadAsAsync 時,內容長度是36,驗證信息必須存在 – cAMPy

+0

如果你首先將它作爲字符串讀取,該怎麼辦? –