【问题标题】:WebApi read exsisting JSON file - C#WebApi 读取现有的 JSON 文件 - C#
【发布时间】:2016-05-26 12:25:52
【问题描述】:

我正在尝试创建一个 webapi,它读取现有的 JSON 文件,然后将其作为 json 对象返回,以便我可以使用 Javascript 将数据作为 HTML 填充到该站点。 http://pptlbhweb.azurewebsites.net/

JSON 文件得到更新,因为我有一个温度记录器,可将事件记录到 eventthub - Streamanalytics - 在 blob 存储 (Azure) 中另存为 JSON

这是 JSON 文件:https://pptlbhstorage.blob.core.windows.net/temperature/0_7622a22009224c78a46c0b2bc0a3fd82_1.json

如果您查看 JSON 文件,它需要在末尾附加“]”(这是我的想法),这样我可以获得 WebApi 返回的有效 JSON 对象。

我已经创建了一个 WebApi,所以我可以使用 URL 来获取数据。 http://pptlbhwebapi.azurewebsites.net/api/test

获取温度的类似方法例如: http://pptlbhwebapi.azurewebsites.net/api/temperature

修复:

将此添加到您的 api 控制器:

[System.Web.Http.Route("api/readandreturnjson")]
[System.Web.Http.HttpGet]
public async Task<IHttpActionResult> ReadAndReturnJsonAsync()
{
    // object to return through the API (it'll be serialized by WebAPI)
    object obj = null;
    // WebClient used to download the JSON file
    using (var wc = new WebClient())
    {

        var url =
        "https://pptlbhstorage.blob.core.windows.net/temperature/0_7622a22009224c78a46c0b2bc0a3fd82_1.json";
        // Used to hold and add a ']' to the downloaded JSON
        StringBuilder builder = new StringBuilder();
        builder.Append(await wc.DownloadStringTaskAsync(url));
        builder.Append("]");
        // Deserialize the now valid JSON into obj
        obj =  JsonConvert.DeserializeObject(builder.ToString());
    }
    // return the json with 200 Http status.
    return Ok(obj);
}

在 Global.assax 中:

GlobalConfiguration.Configuration.Formatters.Remove(GlobalConfiguration.Configu‌​ration.Formatters.XmlFormatter);

【问题讨论】:

    标签: javascript c# json azure asp.net-web-api


    【解决方案1】:

    你可以这样做:

    [System.Web.Http.Route("api/readandreturnjson")]
    [System.Web.Http.HttpGet]
    public async Task<IHttpActionResult> ReadAndReturnJsonAsync()
    {
        // object to return through the API (it'll be serialized by WebAPI)
        object obj = null;
        // WebClient used to download the JSON file
        using (var wc = new WebClient())
        {
    
            var url =
            "https://pptlbhstorage.blob.core.windows.net/temperature/0_7622a22009224c78a46c0b2bc0a3fd82_1.json";
            // Used to hold and add a ']' to the downloaded JSON
            StringBuilder builder = new StringBuilder();
            builder.Append(await wc.DownloadStringTaskAsync(url));
            builder.Append("]");
            // Deserialize the now valid JSON into obj
            obj =  JsonConvert.DeserializeObject(builder.ToString());
        }
        // return the json with 200 Http status.
        return Ok(obj);
    }
    

    【讨论】:

    • 感谢您的回答,当我将其粘贴到我的 testController 中时,我遇到了选择 System.web.http.httpgetattribute 和 System.web.mvc.httpgetattribute 之间的问题。我这样做对吗?
    • 既然你使用的是WebAPI那么你应该选择System.Web.Http.httpGetAttribute@yellowborat
    • 好的,那我把这个放到我的http get in testController中?
    • 我的编辑有意义吗?还是我完全误解了这个概念?
    • @yellowborat 是的。关于它。请参阅我的新编辑。添加Route后可以调用http://yoursever/api/readandreturnjson的方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 2018-01-07
    • 2020-09-15
    相关资源
    最近更新 更多