3

こんにちは、これは mvc4 webapi コードの一部です。コードの各行を説明してくれる人はいますか?

public HttpResponseMessage PostProduct(Product item)
{
    item = repository.Add(item);
    var response =  Request.CreateResponse(HttpStatusCode.Created, item);

    string uri = Url.RouteUrl("DefaultApi", new { id = item.Id });
    response.Headers.Location = new Uri(uri);
    return response;
}

私は製品アイテムを送信していることだけを理解しています..その見返りに、このWeb APIは新しく追加された製品の応答を返しますが、特にこの2行を理解していませんでした

 string uri = Url.RouteUrl("DefaultApi", new { id = item.Id });
        response.Headers.Location = new Uri(uri);
4

2 に答える 2

4
public HttpResponseMessage PostProduct(Product item)
{
    //creates and adds an item to repository(db)
    item = repository.Add(item);
    //creates a new httpresponse
    var response =  Request.CreateResponse(HttpStatusCode.Created, item);
    //creates new uri 
    string uri = Url.RouteUrl("DefaultApi", new { id = item.Id });
    //set header for new uri
    response.Headers.Location = new Uri(uri);
    return response;
}

この行は新しい RouteUrl を作成します -> 基本的には応答ヘッダーへのリンクです。

私のアドバイスは、ここから公式ドキュメントから始めることです: http://www.asp.net/web-api、それは私にとってはうまくいきました。ここで調査すべきことがたくさんあります: http://geekswithblogs.net/JoshReuben/archive/2012/10/28/aspnet-webapi-rest-guidance.aspx

この回答に投稿するには例が多すぎるため、役立つ場合があります。

· 応答コード: デフォルトでは、Web API フレームワークは応答ステータス コードを 200 (OK) に設定します。しかし、HTTP/1.1 プロトコルによれば、POST 要求の結果としてリソースが作成された場合、サーバーはステータス 201 (Created) で応答する必要があります。非 Get メソッドは HttpResponseMessage を返す必要があります

· Location: サーバーがリソースを作成するとき、応答の Location ヘッダーに新しいリソースの URI を含める必要があります。

public HttpResponseMessage PostProduct(Product item)
{ 
  item = repository.Add(item);

  var response = Request.CreateResponse<Product>(HttpStatusCode.Created, item);

  string uri = Url.Link("DefaultApi", new { id = item.Id });

  response.Headers.Location = new Uri(uri);

  return response;
}
于 2013-03-30T06:35:42.230 に答える