我有一个Web服务,我需要从中返回一个包含html的字符串。这个html是Select控件的标记(用于jqGrid搜索过滤器),例如
<select><option id='1'> value 1 </option></select>
我的WCF Web服务包含一个将此值作为字符串...
返回的方法public string GetLeadTypeSelect()
{
return "<select><option id='1'> value 1 </option></select>";
}
此方法的合同是:
[OperationContract]
[WebInvoke(Method = "GET",
BodyStyle = WebMessageBodyStyle.Bare,
ResponseFormat = WebMessageFormat.Json)]
string GetLeadTypeSelect();
我的问题是转义字符被插入到字符串中,因此渲染返回的HTML无用 - 服务返回:
"<select><option id='1'> value 1 <\/option><\/select>"
结尾'/'
和<option>
代码中的引号和转义<select>
都会导致问题。
jqGrid使用返回的HTML显示下拉列表...
filterModel: [
{ label: 'Type', name: 'type', stype: 'select', surl: '../../../Services/Leads/GetLeads.svc/GetLeadTypeSelect' },
所以,我的问题是,如何将纯HTML从此Web服务返回给客户端,以便将其插入到我的HTML页面中?
提前感谢您的帮助, 科林。
答案 0 :(得分:6)
我知道这是一篇旧帖子,但对于只在IIS中托管的服务,这里有一种简单的方法可以返回html:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public Stream getHtml()
{
// get the html
var html = DoSomethingToGetHtml(); //Not a built-in .Net method ;)
// we want our result interpreted as plain html
WebOperationContext.Current.OutgoingResponse.ContentType = "text/html; charset=utf-8";
// create a stream from our html because trying to return a string adds an extra header tag
// to the response. Returning a stream returns the html by itself
var result = new MemoryStream(Encoding.UTF8.GetBytes(html));
// return the result
return result;
}
此代码在托管服务的web.config中需要以下内容:
<system.serviceModel>
<!-- enable HttpContext.Current by setting aspNetCompatibilityEnabled=true-->
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<behaviors>
<endpointBehaviors>
<behavior name="webHttpEnabled">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
...
<system.serviceModel>
在服务配置中,设置behaviorConfiguration="webHttpEnabled"
。
以这种方式返回html会限制服务的可重用性,但如果您有理由确定该服务将始终在IIS中托管,则可以轻松解决问题。
答案 1 :(得分:0)
我假设您通过Javascript使用它。
如果你做了一个unescape(响应),你的问题应该得到解决。
另一方面,如果您不在Javascript中使用它,而只是在ASP.NET / PHP /任何网站中使用它,您可能只需返回一组值和显示值,这样您就可以重用其他代码中的web服务。
您的代码现在只能在HTML环境中使用。如果您需要明天使用您的Web服务编写.NET / C ++ /任何应用程序,该怎么办?然后你需要改变它。这不是网络服务的重点。 Web服务提高了代码的可重用性。你正在与之抗争。 (而且代码会赢!)