このhttp://johnculviner.com/jquery-file-download-plugin-for-ajax-like-feature-rich-file-downloads/を使用して、WebAPI からの動的ファイル ダウンロードを実装しています。
ここで重要なのは、ファイルの生成が終了したときにブラウザーに通知するカスタム属性フィルターで、要求を使用して Cookie を設定することです。その後、読み込みメッセージが削除され、ファイルがブラウザーにストリーミングされます。
これは、ローカルでテストするとすべて正常に機能しますが、サーバーに展開すると System.NullReferenceException が発生します。エラーは属性フィルターを指しています-上記のリンクにはASP.NET MVC 3でこれを行う方法の例がありますが、私は4を使用しているため、これに変換されています-
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public class FileDownloadAttribute : System.Web.Http.Filters.ActionFilterAttribute
{
public string CookieName { get; set; }
public string CookiePath { get; set; }
public FileDownloadAttribute(string cookieName = "fileDownload", string cookiePath = "/")
{
CookieName = cookieName;
CookiePath = cookiePath;
}
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
CheckAndHandleFileResult(actionExecutedContext);
base.OnActionExecuted(actionExecutedContext);
}
/// <summary>
/// Write a cookie to inform jquery.fileDownload that a successful file download has occured
/// </summary>
/// <param name="filterContext"></param>
private void CheckAndHandleFileResult(HttpActionExecutedContext filterContext)
{
List<CookieHeaderValue> cookies = new List<CookieHeaderValue>();
CookieHeaderValue cookie = new CookieHeaderValue(CookieName, "true"){ Path = CookiePath };
cookies.Add(cookie);
filterContext.Response.Headers.AddCookies(cookies);
}
}
これは私が得るエラーです
c:\Dev\Pensions\Main\API\Attributes\FileDownloadAttribute.cs: System.Web.Http.Filters.ActionFilterAttribute.CallOnActionExecuted(HttpActionContext actionContext) の 28 行目の API.Attributes.FileDownloadAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext) での System.NullReferenceException 、HttpResponseMessage 応答、例外例外) で System.Web.Http.Filters.ActionFilterAttribute.<>c_ DisplayClass2.b _1(CatchInfo 1 info) at System.Threading.Tasks.TaskHelpersExtensions.<>c__DisplayClass4
1.b__3() で System.Threading.Tasks.TaskHelpersExtensions.CatchImpl[TResult](Task task, Func `1 継続、CancellationToken cancelToken)
誰にもアイデアはありますか?ローカルで (IIS を介して) 実行すると問題なく動作するのに、サーバーに展開すると問題が発生する理由がわかりません。
編集 -
エラーの28行目はこれを参照しています
CheckAndHandleFileResult(actionExecutedContext);
EDIT 2-完全な属性フィルタークラスで更新