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

Alf*_*ker 6 c# asp.net asp.net-mvc json asp.net-core

这是我的第一个问题,所以我很抱歉,如果我搞乱格式化或一般做错了,请随时给我指点,我总是乐于学习.

无论如何,我的问题是我有一个Web应用程序,我正在使用ASP.NET 5和MVC 6,所有这些都是最新的,到目前为止测试,我一直在使用localdb并使用假数据.现在,我有一个URL,带有一个API令牌和登录信息,我正在使用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);
Run Code Online (Sandbox Code Playgroud)

这里是我被困的地方,因为我不确定如何将它作为模型数据传递给视图,我目前没有模型,我想基于这个数据库制作一个并使用Entity Framework像我一样使用它一直在使用localdb.如果有更好的方法,请随时提出.我会接受我现在能得到的所有帮助.

Shy*_*yju 2

您需要创建 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);
}
Run Code Online (Sandbox Code Playgroud)

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

{   "Code": "Test", "Name": "TestName" }
Run Code Online (Sandbox Code Playgroud)

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

public class MyData
{
   public string Code { get; set; }
   public string Name { set;get;}
   //Add other properties as needed
}
Run Code Online (Sandbox Code Playgroud)

现在你的视图应该强类型化到这个 POCO 类

@model MyData
<h2>@Model.Code</h2>
<h2>@Model.Name</h2>
Run Code Online (Sandbox Code Playgroud)