C# 没有MediaTypeFormatter可用于读取类型为';产品';来自媒体类型为';文本/纯文本';
当我尝试使用ASP.NET WEBAPI将表单数据发布到JSON文件时,在控制台中收到“没有MediaTypeFormatter可用于从媒体类型为“text/plain”的内容中读取“Product”类型的对象”错误 我没有在这里发布我的html文件,因为html中没有错误。当请求被发布时会出现错误 请帮助我,因为我现在陷入困境,无法继续前进 控制器调用Post方法:C# 没有MediaTypeFormatter可用于读取类型为';产品';来自媒体类型为';文本/纯文本';,c#,angularjs,asp.net-web-api,C#,Angularjs,Asp.net Web Api,当我尝试使用ASP.NET WEBAPI将表单数据发布到JSON文件时,在控制台中收到“没有MediaTypeFormatter可用于从媒体类型为“text/plain”的内容中读取“Product”类型的对象”错误 我没有在这里发布我的html文件,因为html中没有错误。当请求被发布时会出现错误 请帮助我,因为我现在陷入困境,无法继续前进 控制器调用Post方法: var promisePost = crudService.post(Product); promisePost
var promisePost = crudService.post(Product);
promisePost.then(function (pl) {
$scope.ProductName = pl.data.ProductName;
//loadRecords();
}, function (err) {
console.log("Err" + err);
});
使用中的Post方法:
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;
}
公开作废帖子([FromBody]产品)
{
ProductsRepository repository=新产品repository();
var newproduct=repository.Save(产品);
//退回新产品;
}
内部产品保存(产品)
{
var products=this.Retrieve();
var maxId=products.Max(p=>p.ProductId);
product.ProductId=maxId+1;
产品。添加(产品);
书面资料(产品);
退货产品;
}
私有bool WriteData(列出产品)
{
var filePath=HostingEnvironment.MapPath(@“~/App_Data/Products.json”);
var json=JsonConvert.serialized对象(产品、格式、缩进);
System.IO.File.WriteAllText(文件路径,json);
返回true;
}
尝试以以下方式发布数据:
$http.post(
'http://localhost:50326/api/Products/',
JSON.stringify(Product),
{
headers: {
'Content-Type': 'application/json'
}
}
);
请注意,您不需要指定字符编码(我从未见过Contet类型头中包含该部分。请参见此:)
还要注意,使用JSON.stringify
将参数序列化为JSON,以确保格式正确。在API格式化程序中
SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"));
SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/plain"));
您的错误消息和代码不匹配,它抱怨内容是
text/plain
,但根据您的邮政编码,应该是application/json
。您是否使用了类似fiddler的工具来检查实际的POST请求,以验证其是否正确交付?是的。我用Fiddler检查了我的POST请求,我可以看到我的请求的格式是正确的,我也可以看到JSON的格式。问题发生在.then()函数中,我猜是promisePost.then(函数(pl){$scope.ProductName=pl.data.ProductName;//loadRecords();}您是否检查了内容类型
标题?我怀疑它发生在您的然后
中,因为这就是从API获取500错误的原因?控制台中的错误显示为“POST 500(内部服务器错误)”响应中的内容类型是Content-type:application/json;charset=utf-8,而请求中的内容类型是Content-type:text/plain;charset=utf-8。奇怪的是,它是text/plain,因为我们明确指定它是application/json类型