我接受“没有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;
}
答案 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"));