添加缺少的标头值

时间:2017-11-09 09:59:01

标签: c# web-services asp.net-mvc-4 asp.net-web-api

我使用MVC4 Web API编写了一个RESTful Web服务。调用我的Web服务的客户之一是发布XML正文,但获得JSON响应。

我了解到客户端没有设置Content-type的头值:application / xml或Accept:application / xml。

正在调用我的网络服务的客户是世界上最大的公司之一,并拒绝添加所需的标头值。

所以我的问题是,如何添加客户端未发送的缺失标头值,以便我的Web服务可以返回XML响应?

或者如何让我的Web服务以缺少的XML响应?

我尝试将以下内容添加到Global.asax.cs;

protected void Application_BeginRequest(object sender, EventArgs e)
    {
        if (HttpContext.Current.Request.HttpMethod == "POST" 
            && HttpContext.Current.Request.CurrentExecutionFilePath.Contains("OrderInformation"))
        {
            HttpContext.Current.Request.Headers.Add("content-type", "application/xml");
            HttpContext.Current.Request.Headers.Add("Accept", "application/xml");
        }
    }

但是在运行时抛出异常。

TIA

马特

1 个答案:

答案 0 :(得分:0)

谢谢GPW。你的链接帮助,我已经创建了一个DelegatingHandler来纠正请求标题

public class MediaTypeDelegatingHandler : DelegatingHandler
{
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        var url = request.RequestUri.ToString();

        if (url.Contains("OrderInformation"))
        {
            request.Headers.Accept.Clear();
            request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
        }

        return await base.SendAsync(request, cancellationToken);
    }
}