我正在开发一个新的Web API,并且目前正在集成(重写)旧版API以使用新的API。但是我遇到了Excel模板的问题。每次我尝试POST时,都会得到415不支持的媒体类型错误。
我已经设法让它工作所以我知道我的代码很好问题是当我使用模板时它将标题中的内容类型设置为:
Content-Type: application/xml;
但是,如果我将模板更改为发送:
Content-Type: application/xml; charset=utf-8
它可以像我期望的那样工作。问题是我无法更改生产中的模板。我必须使我的代码与模板一起使用。
答案 0 :(得分:1)
这里的问题似乎是在;
的情况下结束Content-Type: application/xml;
... Web API依靠System.Net.Http
库来获取请求标头,并且此库为null提供了null在这种情况下,HttpRequestMessage's Content.Headers.ContentType
和Web API看到Content-Length大于0但没有Content-Type标头,因此返回415 Unsupported Media Type
。
遵循我已经尝试过并且有效的解决方法(我正在使用Owin中间件,因为这将是我可以在System.Net.Http
库进行解析之前修改原始请求标头的阶段。 ..)
public class FixContentTypeHeader : OwinMiddleware
{
public FixContentTypeHeader(OwinMiddleware next) : base(next) { }
public override async Task Invoke(IOwinContext context)
{
// Check here as requests can or cannot have Content-Type header
if(!string.IsNullOrWhiteSpace(context.Request.ContentType))
{
MediaTypeHeaderValue contentType;
if(!MediaTypeHeaderValue.TryParse(context.Request.ContentType, out contentType))
{
context.Request.ContentType = context.Request.ContentType.TrimEnd(';');
}
}
await Next.Invoke(context);
}
}
public void Configuration(IAppBuilder appBuilder)
{
appBuilder.Use<FixContentTypeHeader>();