【问题标题】:How to remove Escape characters from WebAPI如何从 WebAPI 中删除转义字符
【发布时间】:2018-01-06 06:51:18
【问题描述】:

我必须使用将字符串作为调用外部网站的响应的旧产品。它不是 JSON 或 XML 类型。即使数据是 xml 字符串。

问题是我的 WebAPI 在返回值中发送回 c# 的转义字符。例如 \"1.0\" 这是返回的原始字符串。 有没有办法摆脱返回响应中的转义字符?这看起来很简单。也许是 api 调用的一个属性。

public class DumpController : ApiController
{
    public string Get()
    {

        var myobject = new OrderPackage();
        myobject.Shipper = "something here";
        myobject.ShippingMethod = "So jones said \" this is not right \"";
        myobject.TrackingId = "19199n99fuajf";
        myobject.Id = 1;
        var result = Utility.GenericFunctions.ToXml(myobject, myobject.GetType());
        return result;

    }
}
[Serializable()]
public class OrderPackage
{
    public int Id { get; set; }
    public int OrderId { get; set; }
    public string TrackingId { get; set; }
    public Nullable<System.DateTime> PickupDate { get; set; }
    public string Shipper { get; set; }
    public string ShippingMethod { get; set; }
    public string PackageCreatorId { get; set; }
    public string CartPackageId { get; set; }
}

原始返回字符串:

 "<?xml version=\"1.0\" encoding=\"utf-8\"?><q1:OrderPackage......

我不需要它来打印 \ 字符。

【问题讨论】:

  • 我认为这个字符串是有效的!开头有双引号吗?你如何打印/阅读它?
  • 接收系统的工作方式是将输出作为字符串。所以它确实在上面看到了 \" 我需要它以不转义的方式发送它。我将它作为标准 MVC 控制器而不是返回 actionresult 的 API 进行了简短的测试。这将起作用。我希望它可以作为 WebAPI 而不是.
  • AFAIK,应该没问题。举个例子:看看这个link的结果

标签: c# asp.net-web-api


【解决方案1】:

我想通了。这篇文章回答了它: How to return raw string with ApiController?

简单的跑下来。将返回类型从 String 更改为 HttpResponseMessage。原因是原始字符串返回类型仍将字符串保存在内存中,如 c# 所见。因此,就像返回类型为字符串的基本方法一样,webapi 返回类型的工作方式完全相同。

他的代码解决了我的问题:

public HttpResponseMessage Get()
{
return new HttpResponseMessage()
{
    Content = new StringContent(
        "<strong>test</strong>", 
        Encoding.UTF8, 
        "text/html"
    )
};
}

【讨论】:

    【解决方案2】:

    在这种情况下,您应该返回一个带有纯文本内容的自定义 HttpResponseMessage,因为当您在操作方法中返回“字符串”类型时,将使用框架的默认内容序列化程序,这就是您的字符串将是编码为 javascript 字符串。

    [HttpGet]
    public HttpResponseMessage Get()
    {
        var myobject = new OrderPackage();
        myobject.Shipper = "something here";
        myobject.ShippingMethod = "So jones said \" this is not right \"";
        myobject.TrackingId = "19199n99fuajf";
        myobject.Id = 1;
        var result = Utility.GenericFunctions.ToXml(myobject, myobject.GetType());
    
        var response = new HttpResponseMessage(HttpStatusCode.OK);
        response.Content = new StringContent(result, System.Text.Encoding.UTF8, "text/plain");
        return response;
    }
    

    如果对你有帮助,请告诉我

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-28
      • 1970-01-01
      相关资源
      最近更新 更多