gpt4 book ai didi

WCF 休息 : specify content-type on WebGet Attribute doesn't seem to be working

转载 作者:行者123 更新时间:2023-12-04 15:04:36 25 4
gpt4 key购买 nike

可能是我做错了什么,但我从我的 WCF Rest 服务返回 XML,该服务是用 VS 2010 构建的。在 fiddler 中,您可以在这里看到它返回 test/html 作为内容类型

 HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 222
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 16 Aug 2010 20:49:55 GMT

所以我继续在我的方法的 webget 属性上添加了以下内容,但它仍然返回 text/html ... 我认为我应该返回 text/xml 的内容类型,因为我实际上返回的是 XML?

这是我的方法,我将 ResponseFormat 添加到属性中......我不确定我是否需要 bodystyle(我不知道它是做什么的,但在一个例子中看到了它:-))
    [WebGet(UriTemplate = "", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml)]
public List<SampleItem> GetCollection()
{
// TODO: Replace the current implementation to return a collection of SampleItem instances
return new List<SampleItem>() { new SampleItem() { Id = 1, StringValue = "Hello" } };
}

无论如何,在项目的更改和重建之后,它仍然返回错误的内容类型......我是否错过了什么?
HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 222
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 16 Aug 2010 20:54:15 GMT

编辑

好的,我得到了一个有效的解决方案,但属性方法没有效果,很奇怪……但是如果我把这个
  WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";

现在我检查 fiddler ,内容类型实际上是 text/xml。

但是我需要把它放在每个方法中,而属性方法似乎没有效果。

有人知道为什么吗?

最佳答案

根据 this Firefox 请求 header 对 text/html 的优先级高于 text/xml,导致用 xml 或 json 装饰的 WCF 服务方法返回“错误”响应,尽管我可以想象这是正确的行为。

您可以通过显式设置来强制响应内容类型

WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";

或等效的。如果您真的想为所有浏览器/客户端强制执行特定的内容类型响应,我想这是唯一的选择。

关于WCF 休息 : specify content-type on WebGet Attribute doesn't seem to be working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3497263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com