创建模型和控制器以与Web服务交互

时间:2017-06-01 14:18:45

标签: c# asp.net xml model-view-controller model

我是asp.net MVC的新手。我正在使用一些XML Web服务,需要创建一个Web应用程序来与它们进行交互。

Web应用程序将包含一个包含所有工具ID和描述的表格,当表格中的某个工具被点击时,该表格将使用工具的信息填充表单。

通常从// localhost / dbservices / tool / id访问Web服务。 每个页面都包含与指定工具的id相对应的XML。

我很困惑如何使用MVC开始这个项目。 我从未使用过不在本地数据库中的模型数据。

我如何将XML数据分配给模型并在控制器中访问它然后将其传递给视图?

这是我正在尝试的一些代码。我制作了一个类似于过去的Web表单应用程序。在这里,我试图将所有工具的列表传递给控制器​​。我从中获取了一些代码,并尝试将其实现到我的MVC应用程序中。我想知道我是否走在正确的道路上。还包括我的模型视图和工具控制器。

  public ActionResult Component()
  {
     string rt;
     WebRequest request = 
     WebRequest.Create("http://localhost/DbService/Tool");
     WebResponse response = request.GetResponse();
     Stream dataStream = response.GetResponseStream();
     StreamReader reader = new StreamReader(dataStream);
     rt = reader.ReadToEnd();
     XmlDocument xmldoc = new XmlDocument();
     xmldoc.LoadXml(rt);
     XmlNodeList nodeList = xmldoc.GetElementsByTagName("Tool");

     List<Tool> ToolIdList = new List<Tool>();
     Tool[] toolArray = new Tool[3];
     List<string> toolList = new List<string>();
     foreach (XmlNode node in nodeList)
     {
        toolList.Add(node.InnerText);
     }
     foreach (Tool tool in ToolIdList)
     {
        foreach (var toolId in toolList)
        {
           tool.ToolId = toolId;

        }
     }

     return View(ToolIdList);
  }

工具模型:

 public class Tool
 {
 public int Id { get; set; }
 public string ToolId { get; set; }
 public string Adapter { get; set; }
 public int TNumber { get; set; }
 public List<string> ComponentList { get; set; }
 public List<string> AccessoryList { get; set; }
}

查看:

@model IEnumerable<Project.Models.Tool>

@foreach (var item in Model)
{
@Html.DisplayFor(modelItem => item.ToolId)
}

1 个答案:

答案 0 :(得分:0)

我可以向您推荐XmlSerializer类。它有一个反序列化方法,它基本上将你的xml解压缩到一个对象(这会给你的代码带来困难)

反序列化程序文档: https://msdn.microsoft.com/en-us/library/tz8csy73(v=vs.110).aspx

设置和使用示例: https://www.codeproject.com/Articles/487571/XML-Serialization-and-Deserialization-Part-2

此外,将控制器外部的Web调用解压缩为辅助方法。您的网络电话现在无法重复使用,如果您需要通过网站上的任何其他控制器方法调用该服务,您将被迫编写重复的代码。