Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用MVC6在ASP.NET 5中显示从WebRequest获取的JSON数据_C#_Asp.net_Json_Asp.net Mvc_Asp.net Core - Fatal编程技术网

C# 使用MVC6在ASP.NET 5中显示从WebRequest获取的JSON数据

C# 使用MVC6在ASP.NET 5中显示从WebRequest获取的JSON数据,c#,asp.net,json,asp.net-mvc,asp.net-core,C#,Asp.net,Json,Asp.net Mvc,Asp.net Core,这是我的第一个问题,所以如果我搞砸了格式,或者总体上做错了,我很抱歉,请随时给我指点,我随时愿意学习 无论如何,我手头的问题是,我有一个web应用程序,我正在使用ASP.NET 5和MVC 6开发,所有这些都是最新的,到目前为止,为了进行测试,我一直在使用localdb并处理假数据。现在,我有了一个带有API标记的url和登录信息,我使用WebRequest获取数据,并使用StreamReader将其流式传输到一个变量中,写入它,然后尝试返回它 WebRequest req = WebReque

这是我的第一个问题,所以如果我搞砸了格式,或者总体上做错了,我很抱歉,请随时给我指点,我随时愿意学习

无论如何,我手头的问题是,我有一个web应用程序,我正在使用ASP.NET 5和MVC 6开发,所有这些都是最新的,到目前为止,为了进行测试,我一直在使用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一样。如果有更好的方法,请随时展示。我现在会接受所有能得到的帮助

如果您收到的是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序列化到该模型中。下面是一个例子:

发件人:

公共类帐户
{
公共字符串电子邮件{get;set;}
公共bool活动{get;set;}
公共日期时间CreatedDate{get;set;}
公共IList角色{get;set;}
}
字符串json=@”{
“电子邮件”:james@example.com',
“活动”:正确,
“CreatedDate”:“2013-01-20T00:00:00Z”,
“角色”:[
“用户”,
“管理员”
]
}";
Account=JsonConvert.DeserializeObject(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);
}
您已经创建了一个名为
MyData
的POCO类,它可以用来表示从api返回的数据。您可以使用从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>
@model MyData
@模型代码
@型号.名称

将您的json粘贴到,您的模型将与之大致相同。因此,当我从该json创建模型时,我是否会使用上面和查看页面上相同的代码,调用该模型,并像使用localdb一样引用其中的数据?如果我使用您给我的第二段代码,我是否可以将其视为“代码优先“数据库模型?我的意思是,我是否能够在视图中正常使用获取数据。我目前正在为它制作一个模型,我将测试您的代码,感谢您的回复!是的,没错。您可以将结果用作本机视图模型。如果您发现自己需要将数据传输到不同的模型,我非常喜欢AutoMapper库,它可以保存语法。实际上,asp.net 5似乎不再支持JavaScriptSerializer。对它的依赖已经多年没有更新了,显然他们现在正在使用Newtonsoft.Json,这是我正在研究的一个包。当然,是的,我完全忘记了,抱歉。我认为asp.net团队转而使用mvc4。事实上,如果您的数据是一个无标题的json集合,最好有一个包装类来保存它。感谢您的回复,我将研究并尝试应用它,我非常感谢您的时间和努力!因此,对于序列化,我必须使用这种特定类型的函数,还是可以在常规IActionResult控制器函数中使用它?我正在从表单中获取搜索条件,并且已经在该函数中收集了所有用户数据,我只想插入该数据并获取我请求的数据。是的,您可以在控制器操作中执行此操作。
public class MyData
{
   public string Code { get; set; }
   public string Name { set;get;}
   //Add other properties as needed
}
@model MyData
<h2>@Model.Code</h2>
<h2>@Model.Name</h2>