使用 MVC 6 显示从 ASP.NET 5 中的 WebRequest 获取的 JSON 数据

本文关键字:WebRequest 中的 获取 数据 JSON NET MVC 显示 ASP 使用 | 更新日期: 2023-09-27 18:37:12

这是我的第一个问题,所以如果我弄乱了格式或做错了,我深表歉意,请随时给我指点,我总是乐于学习。

无论如何,我手头的问题是我有一个正在使用 ASP.NET 5 和 MVC 6 的 Web 应用程序,都是最新的,到目前为止,为了进行测试,我一直在使用 localdb 并使用假数据。现在,我有一个带有 API 令牌和登录信息的 URL,并且我正在使用 WebRequest 获取数据并使用 StreamReader 将其流式传输到变量中,写入它,然后尝试返回它。

WebRequest req = WebRequest.Create(@"https://url.fortheapi.com/api/search/things?criteria=" + userInput);
req.Method = "GET";
req.Headers["username"] = "user";
req.Headers["password"] = "password";
req.Headers["token"] = "token";
StreamReader responseReader = new StreamReader(req.GetResponse().GetResponseStream());
var responseData = responseReader.ReadToEnd();
Response.WriteAsync(responseData);
return View(responseData);

这就是我陷入困境的地方,因为我不确定如何将其作为模型数据传递给视图,我目前没有模型,我想基于此数据库制作一个模型并使用实体框架使用它,就像我一直使用 localdb 一样。如果有更好的方法,请随时展示。我将接受我现在能得到的所有帮助。

使用 MVC 6 显示从 ASP.NET 5 中的 WebRequest 获取的 JSON 数据

您需要创建 POCO 类来表示从 api 调用接收的数据。获得响应数据后,只需使用 javascript 序列化即可反序列化对 POCO 类对象的响应。您可以将其传递给您的视图。

public async Task<ActionResult> Contact()
{
    var req = WebRequest.Create(@"yourApiEndpointUrlHere");    
    var r = await req.GetResponseAsync().ConfigureAwait(false);              
    var responseReader = new StreamReader(r.GetResponseStream());
    var responseData = await responseReader.ReadToEndAsync();
    var d = Newtonsoft.Json.JsonConvert.DeserializeObject<MyData>(responseData);    
    return View(d);
}

假设您的 api 返回这样的 json 数据

{   "Code": "Test", "Name": "TestName" }

并且您已经创建了一个名为 MyData 的 POCO 类,该类可用于表示从 API 返回的数据。您可以使用 json2csharp 从从 API 收到的 json 响应生成 C# 类。

public class MyData
{
   public string Code { get; set; }
   public string Name { set;get;}
   //Add other properties as needed
}

现在,您的视图应强类型化为此 POCO 类

@model MyData
<h2>@Model.Code</h2>
<h2>@Model.Name</h2>

如果您收到的是 JSON,您可以通过多种方式完成此操作。

一种是将您发布的代码包装到 JSON 结果类型操作中。下面是一个非常简单的例子:

    [HttpPost]
    public JsonResult GetIncidentId(int customerId, string incidentNumber)
    {
        JsonResult jsonResult = null;
        Incident incident = null;
        try
        {
            incident = dal.GetIncident(customerId, incidentNumber);
            if (incident != null)
                jsonResult = Json(new { id = incident.Id });
            else
                jsonResult = Json(new { id = -1 });
        }
        catch (Exception exception)
        {
            exception.Log();
        }
        return jsonResult;
    }

从视图中通过Javascript调用它并手动填充表单(meh)。

或者更优雅地说,您可以创建一个 MVC 模型来保存您收到的数据并将 JSON 序列化到该模型中。下面是一个示例:

寄件人: http://www.newtonsoft.com/json/help/html/deserializeobject.htm

public class Account
{
    public string Email { get; set; }
    public bool Active { get; set; }
    public DateTime CreatedDate { get; set; }
    public IList<string> Roles { get; set; }
}
string json = @"{
  'Email': 'james@example.com',
  'Active': true,
  'CreatedDate': '2013-01-20T00:00:00Z',
  'Roles': [
    'User',
    'Admin'
  ]
}";
Account account = JsonConvert.DeserializeObject<Account>(json);

希望这有帮助,祝你的应用程序好运!