我必须使用一种旧产品,它将字符串作为来自外部网站的响应。它不是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; }
}
Raw返回字符串:
"<?xml version=\"1.0\" encoding=\"utf-8\"?><q1:OrderPackage......
我需要它不要打印\字符。
答案 0 :(得分:4)
在这种情况下,您应该返回带有纯文本内容的自定义HttpResponseMessage,因为当您返回&#34;字符串&#34;键入您的操作方法,将使用框架的默认内容序列化程序,这就是为什么您的字符串将被编码为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;
}
如果有帮助,请告诉我
答案 1 :(得分:0)
我明白了。这篇文章回答了它: How to return raw string with ApiController?
简单的运行。将返回类型从String更改为HttpResponseMessage。原因是原始字符串返回类型仍然在c#中看到它时将字符串保留在内存中。因此,就像返回类型为string的基本方法一样,webapi返回类型的工作方式完全相同。
他的代码解决了我的问题:
public HttpResponseMessage Get()
{
return new HttpResponseMessage()
{
Content = new StringContent(
"<strong>test</strong>",
Encoding.UTF8,
"text/html"
)
};
}