.net – WCF 4.0 Rest Service返回内容类型texthtml

.net – WCF 4.0 Rest Service返回内容类型texthtml,第1张

概述我有一个WCF 4.0 REST服务.如果我在web.config文件中启用了automaticFormatSelectionEnabled,那么服务将在基于HTTP“Accept”标头的序列化为 XML或 JSON之间正确选择. 但是,当我使用浏览器发出GET命令时,响应正文将返回格式化为XML,但HTTP内容类型标题为“text / html”.这导致浏览器没有意识到响应是XML并尝试将其呈现 我有一个WCF 4.0 REST服务.如果我在web.config文件中启用了automaticFormatSelectionEnabled,那么服务将在基于http“Accept”标头的序列化为 XML或 JSON之间正确选择.

但是,当我使用浏览器发出GET命令时,响应正文将返回格式化为XML,但http内容类型标题为“text / HTML”.这导致浏览器没有意识到响应是XML并尝试将其呈现为HTML(当然这不能很好地工作).这使得在浏览器中测试我的GET方法变得更加困难.

如果我禁用automaticFormatSelectionEnabled,那么一切都按预期工作(响应主体包含XML,http内容类型是“application / xml”),但是,我希望能够在需要时自动切换到JsON.

在通过浏览器请求时,是否有某种方法可以使内容类型正确返回?

解决方法 我遇到了同样的问题,这是一个解决方法.基本上您需要做的是创建一个行为扩展,它将在发送响应时更改内容类型.

您的web.config需要包含以下内容:

<behaviors>  <serviceBehaviors>    <behavior name="WebServiceBehavior">      <serviceMetadata httpGetEnabled="true" />      <serviceDeBUG includeExceptionDetailinFaults="false" />      <MessageInspector/>    </behavior>  </serviceBehaviors></behaviors><extensions>  <behaviorExtensions>    <add name="MessageInspector"          type="namespace.ServiceContentTypeBehaviorExtensionElement,assembly,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null" />  </behaviorExtensions></extensions>

然后,您将需要创建一个继承BehaviorExtensionElement的类

public class ServiceContentTypeBehaviorExtensionElement : BehaviorExtensionElement{    protected overrIDe object CreateBehavior()    {        return new ServiceContentTypeMessageInspector();    }    public overrIDe Type BehaviorType    {        get        {            return typeof(ServiceContentTypeMessageInspector);        }    }}

最后是一个实现IdispatchMessageInspector和IServiceBehavior的类,它可以完成更改内容类型的工作:

public class ServiceContentTypeMessageInspector : IdispatchMessageInspector,IServiceBehavior{    #region IdispatchMessageInspector    public object AfterReceiveRequest(ref Message request,IClIEntChannel channel,InstanceContext instanceContext)    {        return null;    }    public voID BeforeSendReply(ref Message reply,object correlationState)    {        // inspect and/or modify the reply        if (WebOperationContext.Current.OutgoingResponse.headers[httpResponseheader.ContentType] == "text/HTML; charset=utf-8" &&            WebOperationContext.Current.OutgoingResponse.Format == Webmessageformat.Xml)        {            WebOperationContext.Current.OutgoingResponse.headers[httpResponseheader.ContentType] = "application/xml; charset=utf-8";        }    }    #endregion    #region IServiceBehavior    public voID ApplydispatchBehavior(ServiceDescription serviceDescription,ServiceHostBase serviceHostBase)    {        foreach (Channeldispatcher dispatcher in serviceHostBase.Channeldispatchers)        {            foreach (var endpoint in dispatcher.Endpoints)            {                endpoint.dispatchRuntime.MessageInspectors.Add(new ServiceContentTypeMessageInspector());            }        }    }    public voID AddBindingParameters(ServiceDescription serviceDescription,ServiceHostBase serviceHostBase,Collection<ServiceEndpoint> endpoints,BindingParameterCollection bindingParameters)    {    }    public voID ValIDate(ServiceDescription serviceDescription,ServiceHostBase serviceHostBase)    {    }    #endregion}

应该按预期工作!

总结

以上是内存溢出为你收集整理的.net – WCF 4.0 Rest Service返回内容类型text / html全部内容,希望文章能够帮你解决.net – WCF 4.0 Rest Service返回内容类型text / html所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1059626.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存