WebGet 的 WCF 响应格式
WCF 为 ServiceContract 中的 WebGet 注释中的 ResponseFormat 属性提供了两个选项。
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebGet(UriTemplate = "greet/{value}", BodyStyle = WebMessageBodyStyle.Bare)]
string GetData(string value);
[OperationContract]
[WebGet(UriTemplate = "foo", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
string Foo();
ResponseFormat 的选项为 WebMessageFormat.Json 和 WebMessageFormat.Xml。 是否可以编写我自己的网络消息格式? 我希望当客户端调用 foo() 方法时,他会得到原始字符串 - 没有 json 或 xml 包装器。
WCF offers two options for ResponseFormat attribute in WebGet annotation in ServiceContract.
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebGet(UriTemplate = "greet/{value}", BodyStyle = WebMessageBodyStyle.Bare)]
string GetData(string value);
[OperationContract]
[WebGet(UriTemplate = "foo", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
string Foo();
The options for ResponseFormat are WebMessageFormat.Json and WebMessageFormat.Xml. Is it possible to write my own web message format? I would like that when client calls foo() method he gets raw string - without json or xml wrappers.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
尝试使用
then 从您的函数返回 System.IO.Stream 。
下面是我用来从数据库返回图像的一些代码,但可以通过 URL 访问:
实现:
在您的情况下,要返回原始字符串,请将 ContentType 设置为“text/plain”之类的内容并将数据作为流返回。 猜测是这样的:
Try using
Then return a System.IO.Stream from your function.
Here's some code I use to return an image out of a database, but accessible via a URL:
Implementation:
In your case, to return a raw string, set the ContentType to something like "text/plain" and return your data as a stream. At a guess, something like this:
WebGetAttribute
是由 Microsoft 提供,我认为您无法扩展WebMessageFormat
。 但是,您可以扩展WebHttpBinding
< /a> 使用WebGetAttribute
。 您可以添加自己的属性,例如一般来说,自定义 WCF 中的消息布局称为自定义消息编码器/编码。 Microsoft 提供了一个示例:自定义消息编码器:压缩编码器。 人们所做的另一个常见扩展是扩展行为以添加自定义错误处理,因此您可以在这个方向上寻找一些示例。
WebGetAttribute
is shipped by Microsoft, and I don't think you can extendWebMessageFormat
. However you could probably extend theWebHttpBinding
that usesWebGetAttribute
. You could add your own attribute likeIn general, customizing the message layout in WCF is called custom message encoder/encoding. Microsoft provides an example: Custom Message Encoder: Compression Encoder. Also another common extension people do is to extend behavior to add custom error handling, so you could look for some example in that direction.
我像这样实现了这个属性,也许它会对将来的人有所帮助:
I implemented this attribute like this, maybe it will help someone in the future:
如果您正在处理 HTTP,那么有一种方法可以实现此目的,这不太好,但我想我可以提到它。
您可以将方法的返回类型设置为 void,然后将原始字符串直接输出到响应中。
There is one way how to achieve this if you're dealing with HTTP, it's not exactly nice, but I thought I could mention it.
You can set the return type of your method to void and just output your raw string directly into the response.