C# 没有MediaTypeFormatter可用于读取类型为';产品';来自媒体类型为';文本/纯文本';

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

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

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

请帮助我,因为我现在陷入困境,无法继续前进

控制器调用Post方法:

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类型