2016-04-14 125 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

如果你首先将它作为字符串读取,该怎么办? –