1

我正在使用此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);
    }
}

这是我得到的错误

System.NullReferenceException at API.Attributes.FileDownloadAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 在 c:\Dev\Pensions\Main\API\Attributes\FileDownloadAttribute.cs: System.Web.Http.Filters.ActionFilterAttribute.CallOnActionExecuted (HttpActionContext actionContext) 的第 28 行, HttpResponseMessage 响应, 异常异常) 在 System.Web.Http.Filters.ActionFilterAttribute.<>c_ DisplayClass2.b _1(CatchInfo 1 info) at System.Threading.Tasks.TaskHelpersExtensions.<>c__DisplayClass41.b__3() 在 System.Threading.Tasks.TaskHelpersExtensions.CatchImpl[TResult](任务任务, Func `1 延续,CancellationToken cancelToken)

有人有想法么?我不明白为什么它在本地(通过 IIS)运行良好,但在部署到服务器时却不行。

编辑 -

错误中的第 28 行指的是这一行

CheckAndHandleFileResult(actionExecutedContext);

编辑 2- 更新为完整的属性过滤器类

4

0 回答 0