如何从WebAPI

时间:2017-07-30 18:37:11

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

我必须使用一种旧产品,它将字符串作为来自外部网站的响应。它不是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......

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

2 个答案:

答案 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"
    )
};
}