使用 ASP.NET Web API 返回 JSON 文件
Posted
技术标签:
【中文标题】使用 ASP.NET Web API 返回 JSON 文件【英文标题】:Return JSON file with ASP.NET Web API 【发布时间】:2013-03-21 11:46:56 【问题描述】:我正在尝试使用 ASP.NET Web API(用于测试)返回一个 JSON 文件。
public string[] Get()
string[] text = System.IO.File.ReadAllLines(@"c:\data.json");
return text;
在 Fiddler 中,这确实显示为 Json 类型,但是当我在 Chrome 中调试并查看对象时,它显示为单行数组(左)。正确的图像是我使用对象时的样子。
谁能告诉我我应该返回什么来获得正确格式的 Json 结果?
【问题讨论】:
***.com/questions/9847564/…帮你! @ssilas777 我不认为这是同一个问题。这是关于返回 XML 与 JSON,而不是返回不正确的 JSON。 【参考方案1】:文件中是否已经包含有效的 JSON?如果是这样,而不是调用 File.ReadAllLines
您应该调用 File.ReadAllText
并将其作为单个字符串获取。然后你需要将它解析为 JSON,以便 Web API 可以重新序列化它。
public object Get()
string allText = System.IO.File.ReadAllText(@"c:\data.json");
object jsonObject = JsonConvert.DeserializeObject(allText);
return jsonObject;
这将:
-
以字符串形式读取文件
将其作为 JSON 对象解析为 CLR 对象
将其返回给 Web API,以便将其格式化为 JSON(或 XML,或其他)
【讨论】:
如果 .JSON 文件是 uri 而不是 c:,文件不接受 uri 作为输入,该怎么做呢【参考方案2】:我找到了另一个解决方案,如果有人感兴趣,它也可以工作。
public HttpResponseMessage Get()
var stream = new FileStream(@"c:\data.json", FileMode.Open);
var result = Request.CreateResponse(HttpStatusCode.OK);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
return result;
【讨论】:
通用 HttpResponseMessage 现在已被弃用,因为它不是类型我需要类似的东西,但需要 IHttpActionResult (WebApi2)。
public virtual IHttpActionResult Get()
var result = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.OK)
Content = new System.Net.Http.ByteArrayContent(System.IO.File.ReadAllBytes(@"c:\temp\some.json"))
;
result.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
return ResponseMessage(result);
【讨论】:
以上是关于使用 ASP.NET Web API 返回 JSON 文件的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Web API Authentication.GetExternalLoginInfoAsync 始终返回 null