0

ASP.Netを使用してデータベースからExcelファイルに情報を出力しようとしています。私のコントローラには2つの方法があります。ASP.NET 5はレスポンスを使用できません

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

私は、このように私は現在dnx451を使用しています、ASP.Net 5を使用してExcelファイルをエクスポートする方法が分からないので、私はのSystem.Webを使用するように強制しています。私はSystem.Webを使用するために私のproject.jsonからdnxcore50を削除しました。トップメソッドを呼び出すときに

はしかし、私は次のエラーを取得する:

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

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

このコード使用のオリジナル例:

Response 

の代わりに:

System.Web.HttpContext.Current.Response 
私はそれがSystem.Web.HttpResponseも動作しません使用する代わりに、System.Webの

のMicrosoft.AspNet.Http.HttpResponseを使用していますので、それが次のエラー与えるのでちょうどレスポンスを使用使用することはできません

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

これは私の最初のWebアプリケーションであり、この問題が原因で私は停止してしまいました。誰でも助けてくれますか?

答えて

4

System.Webは使用できません。 ASP.Net Coreの目標の1つは、System.Webへの依存を取り除くことでした。 ASP.Net CoreはSystem.Webに依存しないので、HttpContextらは、初期化されず、したがってNREになります。 IHttpContextAccessorを使用して、ASP.NetコアでHttpContextを取得し、そこからResponseにアクセスできます。

+0

ありがとうございます、私は今、応答を使用することができます。 しかし、WriteTsv メソッドは、ASP.Netコアで未処理であるためコンパイルされません。 ASP.Net 5への切り替えは大きな間違いでした。 –

+0

なぜそれはコンパイルされませんか?多分あなたはいくつかの参考文献を見逃しているでしょうか – Pawel

+0

この例では、DNX Core 5.0と完全に互換性がない 'System.ComponentModel'を使用していますので、プロジェクトはコンパイルされません。 また、IHttpContextAccessorを使用してResponse.Outputの同等物を見つけることができません –

関連する問題