ASP.NET 5无法使用Response

时间:2016-04-08 04:35:24

标签: excel asp.net-core asp.net-core-mvc httpresponse system.web

我正在尝试使用ASP.Net 5将数据库中的信息输出到Excel文件。在我的控制器中,我有两种方法。

public void ExportData()
    {
        var data = new[]{
                           new{ Name="Ram", Email="ram@techbrij.com", Phone="111-222-3333" },
                           new{ Name="Shyam", Email="shyam@techbrij.com", Phone="159-222-1596" },
                           new{ Name="Mohan", Email="mohan@techbrij.com", Phone="456-222-4569" },
                           new{ Name="Sohan", Email="sohan@techbrij.com", Phone="789-456-3333" },
                           new{ Name="Karan", Email="karan@techbrij.com", Phone="111-222-1234" },
                           new{ Name="Brij", Email="brij@techbrij.com", 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 ,因为我不知道如何使用ASP.Net 5导出excel文件,因此我目前正在使用 dnx451 。我从project.json中删除了 dnxcore50 ,以便使用System.Web。

然而,当调用top方法时,我收到以下错误:

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

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

使用此代码的原始示例:

Response

而不是:

System.Web.HttpContext.Current.Response

我不能仅使用响应,因为它使用Microsoft.AspNet.Http.HttpResponse而不是System.Web

使用System.Web.HttpResponse也不起作用,因为它会出现以下错误:

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

这是我的第一个Web应用程序,这个问题导致我陷入停顿。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:4)

您无法使用System.Web。 ASP.Net Core的目标之一是消除对System.Web的依赖。由于ASP.Net Core不依赖于System.Web的HttpContext等。不会被初始化,因此也就是NRE。您可以使用IHttpContextAccessor在ASP.Net Core中获取HttpContext并从那里访问Response