6

http 経由でデータを送信する必要があるため、遠く離れたクライアントから挿入したいと考えています。を正しく
使用できますgetPerformances()httpClient api/performances?date={0}

私のpostPorformances()内部の実装PerformancesControllerが正しいかどうか、クライアントからそれを呼び出す方法があるかどうかを尋ねたいですか?

これが私の実装です:

public class PerformancesController : ApiController
    {
        // GET api/performances
        public IEnumerable<Performance> getPerformances(DateTime date)
        {
            return DataProvider.Instance.getPerformances(date);
        }

        public HttpResponseMessage postPerformances(Performance p)
        {
            DataProvider.Instance.insertPerformance(p);
            var response = Request.CreateResponse<Performance>(HttpStatusCode.Created, p);
            return response;
        }
    }
public class Performance {
    public int Id {get;set;}
    public DateTime Date {get;set;}
    public decimal Value {get;set;}
}

私はこれを試しましたが、確信があります:

  private readonly HttpClient _client;
  string request = String.Format("api/performances");
  var jsonString = "{\"Date\":" + p.Date + ",\"Value\":" + p.Value + "}";
  var httpContent = new StringContent(jsonString, Encoding.UTF8, "application/json");
  var message = await _client.PutAsync(request, httpContent);
4

1 に答える 1

11

を使用して、HttpClientこのメソッドを呼び出すことができます。

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("http://example.com");
    var result = client.PostAsync("/api/performances", new
    {
        id = 1,
        date = DateTime.Now,
        value = 1.5
    }, new JsonMediaTypeFormatter()).Result;
    if (result.IsSuccessStatusCode)
    {
        Console.writeLine("Performance instance successfully sent to the API");
    }
    else
    {
        string content = result.Content.ReadAsStringAsync().Result;
        Console.WriteLine("oops, an error occurred, here's the raw response: {0}", content);
    }
}

この例では、ジェネリックPostAsync<T>メソッドを使用して、任意のオブジェクトを 2 番目のパラメーターとして送信し、メディア タイプ フォーマッターを選択できるようにしています。Performanceここでは、サーバー上のモデルと同じ構造を模倣する匿名オブジェクトとJsonMediaTypeFormatter. Performanceもちろん、このモデルをコントラクト プロジェクトに配置して、クライアントとサーバー間でこのモデルを共有し、サーバーでの変更が自動的にクライアントにも反映されるようにすることもできます。

補足: C# の命名規則では、メソッド名は大文字で始める必要があります。そうgetPerformancesあるべきGetPerformancesか、それ以上GetpostPerformancesある必要がPostPerformancesありますPost

于 2013-03-04T13:57:42.657 に答える