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?
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. –
Warum wird es nicht kompilieren? Vielleicht fehlen Ihnen einige Referenzen? – Pawel
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' –