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アクションの2つのバージョンが同じ応答を生成するため、HttpResponseMessageの代わりにエンティティBranchを返します。これは、フレームワークがHttpResponseMessageの実際の作成を抽象化するのに役立つため、アクションはビジネスロジックにより重点を置くためです。

応答メッセージをより細かく制御する必要がある場合(つまり、別の状態コードを設定する必要がある場合)、代わりにHttpResponseMessageを返します。

お役に立てれば。

于 2012-11-03T17:20:56.043 に答える