HttpClient返回REST API响应的好做法

本文关键字:响应 返回 REST API HttpClient | 更新日期: 2023-09-27 18:12:11

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

HttpClient返回REST API响应的好做法

您可以尝试这样做。我在过去和现在都成功地使用了这个句型。

[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或返回一个专门的视图模型等