【问题标题】:Bad formatter Type exception格式化程序错误类型异常
【发布时间】: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 内容,类型类型,IEnumerable1 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 存在

【问题讨论】:

  • 但是我无法重现您的问题。你能提供更多细节吗?一个重现项目会很棒。

标签: odata asp.net-web-api2


【解决方案1】:

您必须将Client 注册为实体集,作为Application_Start 中OData 模型的一部分。

例如:

ODataModelBuilder builder = new ODataConventionModelBuilder();

builder.EntitySet<Client>("Clients");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 2012-02-01
    • 2010-12-31
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多