c# - 如何使 Web 服务方法以行格式返回字符串值?

标签 c# web-services

如何使网络服务方法以行格式返回字符串值?

我的网络服务方法是这样的

[WebMethod]
public string GetSomeLines()
{
  System.Text.StringBuilder builder = new StringBuilder();
  builder.AppendLine("Line1.");
  builder.AppendLine("Line2.");
  builder.AppendLine("Line3.");
  return builder.ToString();
}

但是当我从网络浏览器或 delphi/c# 消费者那里得到结果时,它将是这样的:

Line1. Line2. Line3.

虽然我希望看到:

Line1.
Line2.
Line3.

我知道这里可能会返回一个 StringBuilder 或字符串数​​组,但我想知道是否有办法用字符串结果来实现。

感谢您的帮助。

最佳答案

StringBuilder 的 AppendLine 方法将默认行终止符添加到附加字符串的末尾。默认行终止符是 Environment.NewLine 的当前值属性,对于非 Unix 平台为“\r\n”,对于 Unix 平台为“\n”。所以您的 WebMethod 试图返回的内容看起来是这样的:

"Line1.\r\nLine2.\r\nLine3.\r\n".

然而,返回值是根据 SOAP 规范通过截断“\r”进行序列化的,结果看起来略有不同:

"Line1.\nLine2.\nLine3.\n".

如果服务使用者在 Windows 平台上运行,它可能会忽略单个“\n”字符作为垃圾。可能的解决方案:

  1. 将返回值编码成另一种格式,例如成一个字节数组所以: return builder.ToString().ToCharArray();

  2. 将 NewLine 替换为调用者可能提供的另一个字符串,例如进入 BR 标签: return builder.Replace(Environment.NewLine, "<br/>").ToString();

  3. 返回行数组或所有行分隔的任何其他容器。

关于c# - 如何使 Web 服务方法以行格式返回字符串值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2873322/

相关文章:

c# - 来自 html 的 iTextSharp XMLWorker 页脚

c# - 使用 XmlDocument 转义换行符

java - 查找运行 web 服务的 android 设备的 IP 地址

c# - 列表和排序

c# - 为我自己的类库创建选项类

c# - 如何将 Expires Header 添加到 iis7 中的自定义文件?

java - 如何在 Spring 中查看 SOAP 请求的 XML 输出?

web-services - SOAP Web 服务方法命名约定

android - 如何解决java.lang.NoClassDefFoundError : okio. Okio?

java - 无法从 Java Web 服务获取数据