【问题标题】:REST API HttpClient return response good practiceREST API HttpClient 返回响应的好习惯
【发布时间】:2014-07-08 14:22:06
【问题描述】:

我有返回对象的方法,问题是我不知道如何在 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);
}

我不喜欢我的 if 和逻辑,还有更好的解决方案吗?

【问题讨论】:

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


    【解决方案1】:

    你可以试试这样的。我过去和现在都成功地使用了这种模式。

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

    【讨论】:

    • 一个问题,我如何通过 responseMessage.Content 填充数据?
    • 您将其添加到来自“服务器”端的 responseMessage 中,该端将内容写入该响应。这要看responseMessage也是什么类型...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多