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

C# 触摸HttpRequestMessage内容时出现ASP.NET 415不支持的媒体类型错误,c#,asp.net,C#,Asp.net,我为我的ASP.NET Web API创建了一个消息处理程序,我希望读取HttpRequestMessage内容,进行一些修改,然后在传递之前将其设置为修改后的内容。然而,即使未进行任何修改,这也会导致415不支持的媒体类型错误。此代码再现了以下问题: HttpRequestMessage request = (input to handler) String body = request.Content.ReadAsStringAsync().Result; request.Content =

我为我的ASP.NET Web API创建了一个消息处理程序,我希望读取HttpRequestMessage内容,进行一些修改,然后在传递之前将其设置为修改后的内容。然而,即使未进行任何修改,这也会导致415不支持的媒体类型错误。此代码再现了以下问题:

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

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

我在另一个问题上找到了这个被忽略的答案:

下面是我的示例的修改代码

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的默认内容类型是“text/plain;charset=utf-8”,而我需要的内容类型是“application/json;charset=utf-8”。

在向api发布任何数据时,请确保发送内容类型时还带有如下标题: 内容类型:application/json;字符集=UTF-8

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


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

是451还是415??451因互联网草案“法律限制资源的新HTTP状态代码”中定义的法律原因(互联网草案)而不可用。用于因法律原因(如审查或政府强制阻止访问)而拒绝访问资源时使用。参考1953年反乌托邦小说《华氏451》,书是非法的。啊,你是对的,它是415。