gpt4 book ai didi

WCF REST Svc GET 返回 HTML

转载 作者:行者123 更新时间:2023-12-01 01:39:19 24 4
gpt4 key购买 nike

我在 WCF 中组合了一个简单的 REST 服务,如下所示:

....
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Xml, UriTemplate = "{uid}/{pwd}/{exrcsPrgmId}/{exchEnum}")]
string GetLiftDataExchange(string uid, string pwd, string exrcsPrgmId, string exchEnum);
....

但是,在调用它时,我并没有完全返回 XML。我得到了 HTXML(我自己编造的首字母缩写词)

而不是我期望的:
<Exercise>
<AccountName>Joe Muscle</AccountName>
<UserID>8008008</UserID>

我得到带有 html 编码的 XML:
&lt;Exercise&gt;&#xD;
&lt;AccountName&gt;John Bonner&lt;/AccountName&gt;&#xD;
&lt;UserID&gt;8008008&lt;/UserID&gt;&#xD;

换句话说,我不需要在浏览器中看到这些数据,而是在应用程序中访问和解析它,因此直接使用 XML 就可以了。

返回此编码的 xml 的服务装饰有什么问题?

最佳答案

当您返回 string 时,并且结果类型是 XML,您将获得编码的字符串以能够表示字符串中的所有字符 - 这会导致 XML 字符被转义。

对于您的场景,您有两种选择。如果您想返回“纯”XML(即 XHTML 或恰好是格式良好的 XML 的 HTML),您可以将返回类型用作 XmlElementXElement .这告诉 WCF 您确实想要返回任意 XML。如果您喜欢下面的代码,您将获得所需的“纯”XML。

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Xml, UriTemplate = "...")]
public XElement GetLiftDataExchange(string uid, string pwd, string exrcsPrgmId, string exchEnum)
{
return XElement.Parse(@"<Exercise>
<AccountName>Joe Muscle</AccountName>
<UserID>8008008</UserID>
</Exercise>");
}

另一种选择是返回 Stream - 这意味着您可以控制输出(有关更多详细信息,请参阅 this blog post),您的代码将类似于下面的代码。这种方法的优点是你的 HTML 不需要是格式良好的 XML(即,你可以有像 <br><hr> 这样的东西,它们是有效的 HTML 但不是有效的 XML)。
[OperationContract]
[WebGet(UriTemplate = "...")]
public Stream GetLiftDataExchange(string uid, string pwd, string exrcsPrgmId, string exchEnum)
{
var str = @"<html><head><title>This is my page</title></head>
<body><h1>Exercise</h1><ul>
<li><b>AccountName</b>: Joe Muscle</li>
<li><b>UserID</b>: 8008008</li></body></html>";
WebOperationContext.Current.OutgoingResponse.ContentType = "text/html";
return new MemoryStream(Encoding.UTF8.GetBytes(str));
}

在相关节点上,请不要使用 [WebInvoke(Method="GET")] , 使用 [WebGet]反而。

关于WCF REST Svc GET 返回 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16592665/

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