0

Ich versuche, Informationen aus meiner Datenbank in eine Excel-Datei mit ASP.Net 5 auszugeben. In meinem Controller habe ich zwei Methoden dafür.ASP.NET 5 kann keine Antwort verwenden

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(); 
     } 
    } 

Ich System.Web, weil ich keine Ahnung, wie exportieren eine Excel-Datei mit ASP.Net 5, also bin ich zur Zeit dnx451 verwenden, haben zu verwenden gezwungen. Ich habe dnxcore50 von meinem project.json gelöscht, um System.Web zu verwenden.

jedoch, wenn die Top-Methode aufrufen, erhalte ich folgende Fehlermeldung:

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

auf

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

Das ursprüngliche Beispiel dieses Codes verwendet:

Response 

Statt:

System.Web.HttpContext.Current.Response 

Ich kann nicht nur Antwort verwenden verwenden, da es Microsoft.AspNet.Http.HttpResponse statt System.Web

Mit System.Web.HttpResponse verwendet auch nicht funktioniert, weil es den folgenden Fehler gibt:

Dies ist meine erste Webanwendung und dieses Problem hat mich zum Stillstand gebracht. Kann mir jemand helfen?

Antwort

4

Sie können System.Web nicht verwenden. Eines der Ziele von ASP.Net Core war es, die Abhängigkeit von System.Web zu entfernen. Da ASP.Net Core nicht von System.Web abhängig ist, werden HttpContext et al. wird nicht initialisiert und daher NRE. Sie können IHttpContextAccessor verwenden, um HttpContext in ASP.Net Core abzurufen und von dort auf die Response zuzugreifen.

+0

Danke, ich kann jetzt Antwort verwenden. Die Methode WriteTsv wird jedoch nicht kompiliert, da sie in ASP.Net Core nicht gesichert ist. Scheint Wechsel zu ASP.Net 5 war ein großer Fehler. –

+0

Warum wird es nicht kompilieren? Vielleicht fehlen Ihnen einige Referenzen? – Pawel

+0

In diesem Beispiel wird 'System.ComponentModel' verwendet, das nicht vollständig mit DNX Core 5.0 kompatibel ist, daher wird mein Projekt nicht kompiliert. Ich finde auch nicht das Äquivalent von Response.Output mit 'IHttpContextAccessor' –