使用远程CSV并转换为模型以便在MVC中查看?

时间:2011-10-25 22:57:00

标签: c# asp.net asp.net-mvc asp.net-mvc-3 csv

我在远程服务器上有一个CSV文件,可通过以下URL访问:http://mydomain.com/test.csv。它只是键/值对的记录。在我的控制器中,我如何使用该CSV文件并作为模型传递给视图?我对MVC3有点新意,所以我很感激任何帮助。

以下是我的CSV示例:

key,value
Key1,ValueA
Key2,ValueB
Key3,ValueC
Key4,ValueD

2 个答案:

答案 0 :(得分:2)

我不会从控制器中调用它。我会使用接口驱动的开发将该逻辑委托给服务。

A quick google为CSV解析器带来了大量结果。所以这只是构建HTTP请求,解析CSV然后将其映射到ViewModel的问题。

所以你的控制器看起来像这样:

    private ICsvParsingService _csvParsingService; // tip: use DI to inject the concrete in ctor.

    [HttpGet]
    public ActionResult Csv()
    {
       var csv = _csvParsingService.Parse("http://mydomain.com/test.csv");
       var model = Mapper.Map<SomeCsvType,YourModel>(csv); // AutoMapper. Or you could do L-R.
       return View(model);
    }

这样,如果您决定使用不同的CSV解析器(或自己动手),您的Controller无需更改。您可以在整个应用程序中重复使用此服务。

答案 1 :(得分:1)

这似乎是一个基本问题。这样的事情应该让你开始。

WebClient client = new WebClient();
string csvContents = client.DownloadString(UrlAsString);
string[] csvLines = csvContents.Split(new string[] {"\n", "\r\n"},
                                      StringSplitOptions.RemoveEmptyEntries); 
SomeModel model = new SomeModel()
model.KeyValuePairs = csvLines.Select(x => x.Contains(","))
                          .Select(x => new KeyValuePair(x.Split(",")[0],
                                                        x.Split(",")[1]);


public class SomeModel()
{
  public IEnumerable<KeyValuePair> KeyValuePairs { get; set; }
}

public class KeyValuePair()
{
   public KeyValuePair() { }
   public KeyValuePair(string Key, string Value) 
   { 
     this.Key = Key;
     this.Value = Value;
   }
   public string Key { get; set; }
   public string Value { get; set; }
}