我有返回对象的方法,问题是我不知道如何验证错误并在MVC视图中正确返回
public async Task<object> GetUser()
{
//....
if (responseMessage.IsSuccessStatusCode)
{
return await responseMessage.Content.ReadAsAsync<User>();
}
if (responseMessage.StatusCode == HttpStatusCode.BadRequest)
{
return await responseMessage.Content.ReadAsAsync<Error>();
}
}
return null;
}
现在在我的控制器中我正在获取数据并尝试返回正确的类型
var httpResult = await GetUser();
if (httpResult.GetType() == typeof (Error))
{
ModelState.AddModelError("", (httpResult as Error).ErrorDescription);
return View(model);
}
if (httpResult.GetType() == typeof (User))
{
var user = httpResult as User;
return View(User);
}
我不喜欢我的ifs和逻辑,还有更好的解决方案吗?
答案 0 :(得分:2)
你可以尝试这样的事情。我过去和现在都成功地使用了这种模式。
[DataContract]
public class OperationResult<T>
{
[DataMember]
public List<Error> Errors { get; set; }
[DataMember]
public T ResultObject { get; set; }
[DataMember]
public bool Success { get; private set; }
public OperationResult(List<Error> errors)
{
Errors = errors;
}
public OperationResult(T resultObject)
{
ResultObject = resultObject;
Success = true;
}
public OperationResult()
{
}
}
从方法中返回此类型并在返回时检查Success
标志,如果为false则读取Errors
属性,并且可以填充ModelState或返回专门的视图模型等。