REST API HttpClient返回响应的好习惯

时间:2014-07-08 14:22:07

标签: c# asp.net-mvc asp.net-web-api httpclient

我有返回对象的方法,问题是我不知道如何验证错误并在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和逻辑,还有更好的解决方案吗?

1 个答案:

答案 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或返回专门的视图模型等。