Использовать удаленный CSV и преобразовать в модель для просмотра в MVC? - PullRequest
0 голосов
/ 26 октября 2011

У меня есть файл CSV на удаленном сервере, доступный через URL-адрес, такой как: http://mydomain.com/test.csv. Это просто записи пары ключ / значение.Как в моем контроллере использовать этот CSV-файл и перейти к представлению в качестве модели?Я немного новичок в MVC3, поэтому буду признателен за любую помощь.

Вот пример моего CSV:

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

Ответы [ 2 ]

2 голосов
/ 26 октября 2011

Я бы не назвал это с контроллера. Я бы делегировал эту логику службе, используя разработку на основе интерфейса.

Быстрый 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 (или сверните свой собственный), ваш контроллер не должен меняться. И вы можете повторно использовать эту службу в своем приложении.

1 голос
/ 26 октября 2011

Это похоже на такой основной вопрос. Как-то так должно начаться.

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; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...