使用Web Api 2将数组作为字符串返回

时间:2015-04-07 21:38:30

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

我有一个Web Api 2端点,它返回包含图像网址数组的Json。它的响应看起来像这样

   {
    "Status": 0,
    "Message": "Success",
    "Images": [
        "http://some.image.com/somepath/SomeReport-0.png",
        "http://some.image.com/somepath/SomeReport-1.png"
    ]
   }

我希望json数组作为数组字符串返回。为了实现这一目标,我需要如何设置我的回复?我目前使用此方法设置数组和响应

// response.status and response.message are added before this

response.Images = imagePaths.Select(x => string.Format(urlString, Path.GetFileName(x)));

HttpResponseMessage apiResponse = Request.CreateResponse(HttpStatusCode.OK, response);

需要以字符串格式返回的数组的目的是我可以将它附加到html数据属性。现在,如果我像这样引用响应:

listItem.append('<a class="dd-option" data-path="' + response.Images + '" href="#"></a>');

属性中的内容类似于

data-attr="http://some.url.com/somepath/ReportStore/image-0.png,http://some.url.com/somepath/ReportStore/image-1.png"

而不是

data-attr="["http://some.url.com/somepath/ReportStore/image-0.png","http://some.url.com/somepath/ReportStore/image-1.png"]"

2 个答案:

答案 0 :(得分:1)

如果您在javascript中执行此操作,则可以使用JSON.stringify

var jsonResponse = 
    {
    "Status": 0,
    "Message": "Success",
    "Images": [
        "http://some.image.com/somepath/SomeReport-0.png",
        "http://some.image.com/somepath/SomeReport-1.png"
    ]
   }

 var images = JSON.stringify(jsonResponse.Images);

console.log(images);

$("#foo").append($("<li>").text("foo").attr("data-foo", images));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="foo">
</ul>

这会给你

<li data-foo="["http://some.image.com/somepath/SomeReport-0.png","http://some.image.com/somepath/SomeReport-1.png"]">foo</li>

但你需要注意引号,因为它可能会生成无效的HTML。

然而,即使你有

data-attr="http://some.url.com/somepath/ReportStore/image-0.png,http://some.url.com/somepath/ReportStore/image-1.png"

你可以使用String.join()获得服务器端,然后你就可以使用javascript split()来重新获得数组。

var imagesArr = ($(this).data("attr")).split(",");

答案 1 :(得分:0)

只需将图像映射到字符串数组,然后从控制器返回该对象。

public string[] Get()
{
     //create this array object from your images object
     return new string[]{"imagePath1", "imagePath2", "imagePath3"};
}