0

Я пытаюсь вывести информацию из моей базы данных в файл Excel с помощью ASP.Net 5. В моем контроллере у меня есть два метода для этого.ASP.NET 5 не может использовать Response

public void ExportData() 
    { 
     var data = new[]{ 
          new{ Name="Ram", Email="[email protected]", Phone="111-222-3333" }, 
          new{ Name="Shyam", Email="[email protected]", Phone="159-222-1596" }, 
          new{ Name="Mohan", Email="[email protected]", Phone="456-222-4569" }, 
          new{ Name="Sohan", Email="[email protected]", Phone="789-456-3333" }, 
          new{ Name="Karan", Email="[email protected]", Phone="111-222-1234" }, 
          new{ Name="Brij", Email="[email protected]", Phone="111-222-3333" } 
        }; 

     System.Web.HttpContext.Current.Response.ClearContent(); 
     System.Web.HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=Contact.xls"); 
     System.Web.HttpContext.Current.Response.AddHeader("Content-Type", "application/vnd.ms-excel"); 
     WriteTsv(data, System.Web.HttpContext.Current.Response.Output); 
     System.Web.HttpContext.Current.Response.End(); 
    } 


public void WriteTsv<T>(IEnumerable<T> data, TextWriter output) 
    { 
     PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T)); 
     foreach (PropertyDescriptor prop in props) 
     { 
      output.Write(prop.DisplayName); // header 
      output.Write("\t"); 
     } 
     output.WriteLine(); 
     foreach (T item in data) 
     { 
      foreach (PropertyDescriptor prop in props) 
      { 
       output.Write(prop.Converter.ConvertToString(
        prop.GetValue(item))); 
       output.Write("\t"); 
      } 
      output.WriteLine(); 
     } 
    } 

Я вынужден использовать System.Web, потому что я понятия не имею, как экспортировать файл Excel с помощью ASP.Net 5, таким образом, я в настоящее время с помощью dnx451. Я удалил dnxcore50 из моего проекта.json, чтобы использовать System.Web.

Однако при вызове верхнего метода, я получаю следующее сообщение об ошибке:

NullReferenceException: Object reference not set to an instance of an object. 

на

System.Web.HttpContext.Current.Response.ClearContent(); 

оригинальный пример этого кода используется:

Response 

Вместо:

System.Web.HttpContext.Current.Response 

Я не могу использовать просто использовать Response, поскольку он использует Microsoft.AspNet.Http.HttpResponse вместо System.Web

Использование System.Web.HttpResponse также не работает, потому что это дает следующее сообщение об ошибке:

An object reference is required for the non-static field, method, or property 

Это мое первое веб-приложение, и эта проблема заставила меня захлебнуться. Может кто-нибудь мне помочь?

ответ

4

Вы не можете использовать System.Web. Одной из целей ASP.Net Core было удаление зависимости от System.Web. Поскольку ASP.Net Core не зависит от System.Web HttpContext и др. не будут инициализированы и, следовательно, NRE. Вы можете использовать IHttpContextAccessor, чтобы получить HttpContext в ядре ASP.Net и получить доступ к Response.

+0

Спасибо, я могу использовать ответ сейчас. Однако метод WriteTsv не будет компилироваться, потому что он не поддерживается в ASP.Net Core. Кажется, переключение на ASP.Net 5 было огромной ошибкой. –

+0

Почему он не компилируется? Может быть, вам не хватает некоторых ссылок? – Pawel

+0

В этом примере используется 'System.ComponentModel', который не полностью совместим с DNX Core 5.0, поэтому мой проект не будет компилироваться. Я также не могу найти эквивалент Response.Output с помощью 'IHttpContextAccessor' –

Смежные вопросы