0

我正在 MVC 4 项目中处理 webapi、EF5、Windsor Castle,我有一个问题......我应该在 Get 方法中返回实体(或 DTO)还是应该返回 HttpResponseMessage?更好的方法和更标准的方法是什么?

那么,是这个吗?

[System.Web.Http.HttpGet]
public HttpResponseMessage GetById(long id)
{
    var branch = Uow.Branches.GetById(id);
    if (branch != null)
    {
        Request.CreateResponse(HttpStatusCode.OK, branch);
    }

    throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));
}

或这个?

[System.Web.Http.HttpGet]
public Branch GetById(long id)
{
    var branch = Uow.Branches.GetById(id);
    if (branch != null) return branch ;
    throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));
}
4

2 回答 2

3

我将返回包装在 HttpResponseMessage 中的 DTO,如下所示:

return this.Request.CreateResponse(HttpStatusCode.OK, branch);

DTO/ViewModel 将允许仅发送所需的属性。

HttpResponseMessage 允许发送额外的状态码,例如在输入无效的情况下,我们可以发送 statusCode 前置条件失败。

if (model.EventDate == null)
            {
                var responseMessage = new HttpResponseMessage();
                responseMessage.StatusCode = HttpStatusCode.PreconditionFailed;
                responseMessage.ReasonPhrase = "Please enter valid EventDate input";
                return responseMessage;

            }
于 2012-11-04T13:46:32.163 回答
1

依靠。但是,在您的示例中,由于 Get 操作的两个版本产生相同的响应,因此我将返回实体分支而不是 HttpResponseMessage。这是因为该框架将帮助抽象出 HttpResponseMessage 的实际创建,因此该操作更侧重于业务逻辑。

如果您需要对响应消息进行更多控制(即设置不同的状态代码),那么我将改为返回 HttpResponseMessage。

希望这可以帮助。

于 2012-11-03T17:20:56.043 回答