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アプリケーションであり、この問題が原因で私は停止してしまいました。誰でも助けてくれますか?
ありがとうございます、私は今、応答を使用することができます。 しかし、WriteTsvメソッドは、ASP.Netコアで未処理であるためコンパイルされません。 ASP.Net 5への切り替えは大きな間違いでした。 –
なぜそれはコンパイルされませんか?多分あなたはいくつかの参考文献を見逃しているでしょうか – Pawel
この例では、DNX Core 5.0と完全に互換性がない 'System.ComponentModel'を使用していますので、プロジェクトはコンパイルされません。 また、IHttpContextAccessorを使用してResponse.Outputの同等物を見つけることができません –