没有MediaTypeFormatter可用于从媒体类型为“text / plain”的内容中读取“Product”类型的对象

时间:2016-03-14 12:41:59

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

我接受“没有MediaTypeFormatter可用于从媒体类型为'text / plain'的内容中读取'Product'类型的对象”当我尝试使用ASP.NET WEBAPI将表单数据发布到JSON文件时控制台出错

我没有在这里发布我的html文件,因为html中没有错误。发布请求时会出现错误。

请帮助我,因为我现在被困住了,无法继续前进。

控制器调用Post方法:

var promisePost = crudService.post(Product);        
promisePost.then(function (pl) {   
    $scope.ProductName = pl.data.ProductName;   
    //loadRecords();   
}, function (err) {   
    console.log("Err" + err);   
});    

服务后发布方法:

this.post = function (Product) {  
    var request = $http({  
        method: "post",  
        url: "http://localhost:50326/api/Products/",  
        data: Product,  
        contentType: 'application/json; charset=utf-8'  
        //Content-Type: application/json  
    });  
    return request;   
}

WebApi方法:

public void Post([FromBody]Product product)  
{  
    ProductsRepository repository = new ProductsRepository();  
    var newproduct = repository.Save(product);    
    //return newproduct;  
}  

internal Product Save(Product product)  
{  
    var products = this.Retrieve();  
    var maxId = products.Max(p => p.ProductId);  
    product.ProductId = maxId + 1;  
    products.Add(product);  
    WriteData(products);  
    return product;  
}

private bool WriteData(List<Product> products)  
{  
    var filePath =   HostingEnvironment.MapPath(@"~/App_Data/Products.json");  

    var json = JsonConvert.SerializeObject(products,   Formatting.Indented);  
    System.IO.File.WriteAllText(filePath, json);  

    return true;  
}

2 个答案:

答案 0 :(得分:0)

尝试以这种方式发布您的数据:

$http.post(
   'http://localhost:50326/api/Products/',
   JSON.stringify(Product),
   { 
      headers: { 
         'Content-Type': 'application/json'
      }
   }
);

请注意,您不需要指定字符编码(我从未见过Contet-Type标题中包含的部分。请参阅:What does "Content-type: application/json; charset=utf-8" really mean?

另请注意,使用JSON.stringify将参数序列化为JSON以确保格式正确。

答案 1 :(得分:0)

在API Formatter中

SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"));
SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/plain"));