我为我的ASP.NET Web API创建了一个消息处理程序,我想读取HttpRequestMessage内容,进行一些修改,然后在传递之前将其设置为修改后的内容。但是,即使没有进行修改,这也会导致415不支持的媒体类型错误。此代码再现了问题:
HttpRequestMessage request = (input to handler)
String body = request.Content.ReadAsStringAsync().Result;
request.Content = new StringContent(body);
如何在不出现415错误的情况下触摸HttpRequestMessage内容?我知道内容应该读一次,但我正在用新内容替换它。是否有需要重置的读取标志?
我在另一个问题上找到了这个被忽视的答案: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"。
在向api发布任何数据时,请确保发送内容类型和标题,如下所示:内容类型:application/json;charset=UTF-8;
这里,发送的数据是json格式和UTF-8格式。
API需要了解数据类型和数据格式,以便将其转换为适当的数据类型。