【发布时间】:2014-07-06 01:03:48
【问题描述】:
我编写了一个简单的 Web API ver 2 - ODATA 服务器。建模是EF6
public class Client
{
private ICollection<ClientCar> _cars;
public Client()
{
_cars = new List<ClientCar>();
}
[Key]
public int ClientID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string TID { get; set; }
public string Phone1 { get; set; }
public string Phone2 { get; set; }
public string Adress { get; set; }
public string DrivingSchoolName { get; set; }
public virtual ICollection<ClientCar> Cars
{
get { return _cars; }
set { _cars = value; }
}
}
但是当我发送 POST 请求时,我得到了异常
POST odata/客户端 HTTP/1.1 内容 ID:1 数据服务版本:2.0 接受:application/atomsvc+xml;q=0.8, application/json;odata=fullmetadata;q=0.7, application/json;q=0.5, /;q=0.1 内容类型:应用程序/json 最大数据服务版本:3.0
{"ClientID":-1,"FirstName":null,"LastName":null,"TID":null,"Phone1":null,"Phone2":null,"Adress":null,"DrivingSchoolName" :null}
我收到错误
{ “odata.错误”:{ “代码”:“”,“消息”:{ "lang":"en-US","value":"该资源不支持请求实体的媒体类型 'application/json'。" },"内部错误":{ "message":"没有 MediaTypeFormatter 可用于从媒体类型为 'application/json' 的内容中读取类型为 'Client' 的对象。","type":"System.Net.Http.UnsupportedMediaTypeException","stacktrace":"在 System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent 内容,类型类型,IEnumerable
1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n at System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable1 格式化程序,IFormatterLogger formatterLogger,CancellationToken cancelToken)\r\n 在 System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync( HttpRequestMessage 请求,Type 类型,IEnumerable`1 格式化程序,IFormatterLogger formatterLogger,CancellationToken cancelToken)" } } }
我的控制器派生自 ODATAController 并且我有 POST 操作
public async Task<IHttpActionResult> Post([FromBody] Client todoitem)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
_contextovider.Clients.Add(todoitem);
await _contextovider.SaveChangesAsync();
return Created(todoitem);
}
当检查格式化程序时,JsonMediaFormatter 存在
【问题讨论】:
-
但是我无法重现您的问题。你能提供更多细节吗?一个重现项目会很棒。