触摸HttpRequestMessage内容时,ASP.NET 415不支持的媒体类型错误

时间:2013-12-16 01:48:42

标签: c# asp.net

我为ASP.NET Web API创建了一个消息处理程序,我想读取HttpRequestMessage内容,进行一些修改,然后在传递之前将其设置为修改后的内容。但是,即使未进行任何修改,也会导致415 Unsupported Media Type错误。此代码重现了该问题:

HttpRequestMessage request = (input to handler)
String body = request.Content.ReadAsStringAsync().Result;
request.Content = new StringContent(body);

如何在不收到415错误的情况下触摸HttpRequestMessage内容?我知道内容应该是一次性读取,但我用新内容替换它。是否有需要在某处重置的读标志?

2 个答案:

答案 0 :(得分:1)

我在另一个问题上找到了这个被忽略的答案:https://stackoverflow.com/a/20262394/2852699

以下是我的示例的修改代码。

HttpRequestMessage request = (input to handler)
MediaTypeHeaderValue contentType = request.Content.Headers.ContentType;
String body = request.Content.ReadAsStringAsync().Result;
(modify body here)
request.Content = new StringContent(body);
request.Content.Headers.ContentType = contentType;

这使我可以阅读,修改,然后编写内容而不会导致任何错误。 StringContent的默认ContentType是“text / plain; charset = utf-8”,而我需要的ContentType是“application / json; charset = UTF-8”。

答案 1 :(得分:1)

在向api发布任何数据时,请确保使用标题发送内容类型,如下所示: Content-Type:application / json;字符集= UTF-8;

这里,发送的数据是json格式和UTF-8格式。

API需要了解数据类型和数据格式,以便将其转换为适当的数据类型。