MVC 4 Web API 发布
Posted
技术标签:
【中文标题】MVC 4 Web API 发布【英文标题】:MVC 4 Web Api Post 【发布时间】: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);
【问题讨论】:
【参考方案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<T>
方法,允许我发送任何对象作为第二个参数并选择媒体类型格式化程序。在这里,我使用了一个匿名对象,它模仿了与服务器上的Performance
模型和JsonMediaTypeFormatter
相同的结构。您当然可以在客户端和服务器之间共享这个 Performance
模型,方法是将它放在一个 contracts 项目中,这样服务器上的更改也会自动反映在客户端上。
旁注:C# 命名约定规定方法名称应以大写字母开头。所以getPerformances
应该是GetPerformances
或者更好的Get
和postPerformances
应该是PostPerformances
或者更好的Post
。
【讨论】:
如果 ap/performances 调用需要很长时间,您可能需要在调用之前设置 client.Timeout以上是关于MVC 4 Web API 发布的主要内容,如果未能解决你的问题,请参考以下文章
从 MVC 4 Web Api 返回匿名类型失败并出现序列化错误
C.S.R.F. 的 MVC 4 Web Api 安全性攻击
正确处理 ASP.net MVC 4 Web Api 路由中的嵌套资源