【问题标题】:MVC 4 Web Api PostMVC 4 Web API 发布
【发布时间】:2013-03-04 13:47:53
【问题描述】:

我想从远程客户端进行插入,因为我需要通过 http 发送数据。
我可以正确使用getPerformances()httpClient api/performances?date={0}

我想问一下我的PerformancesController 中的postPorformances() 实现是否正确以及如何从客户端调用它?

这是我的实现:

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);

【问题讨论】:

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


    【解决方案1】:

    你可以使用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&lt;T&gt; 方法,允许我发送任何对象作为第二个参数并选择媒体类型格式化程序。在这里,我使用了一个匿名对象,它模仿了与服务器上的Performance 模型和JsonMediaTypeFormatter 相同的结构。您当然可以在客户端和服务器之间共享这个 Performance 模型,方法是将它放在一个 contracts 项目中,这样服务器上的更改也会自动反映在客户端上。

    旁注:C# 命名约定规定方法名称应以大写字母开头。所以getPerformances应该是GetPerformances或者更好的GetpostPerformances应该是PostPerformances或者更好的Post

    【讨论】:

    • 如果 ap/performances 调用需要很长时间,您可能需要在调用之前设置 client.Timeout
    猜你喜欢
    • 2013-05-30
    • 1970-01-01
    • 2015-05-27
    • 2013-11-09
    • 1970-01-01
    • 2013-10-22
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多