Я пытаюсь вывести информацию из моей базы данных в файл 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
Это мое первое веб-приложение, и эта проблема заставила меня захлебнуться. Может кто-нибудь мне помочь?
Спасибо, я могу использовать ответ сейчас. Однако метод WriteTsv не будет компилироваться, потому что он не поддерживается в ASP.Net Core. Кажется, переключение на ASP.Net 5 было огромной ошибкой. –
Почему он не компилируется? Может быть, вам не хватает некоторых ссылок? – Pawel
В этом примере используется 'System.ComponentModel', который не полностью совместим с DNX Core 5.0, поэтому мой проект не будет компилироваться. Я также не могу найти эквивалент Response.Output с помощью 'IHttpContextAccessor' –