但是,当我使用浏览器发出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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)