首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Response.AddHeader附件文件和AntiForgeryToken()

Response.AddHeader附件文件和AntiForgeryToken()
EN

Stack Overflow用户
提问于 2019-09-04 12:48:39
回答 1查看 212关注 0票数 0

我正在处理一个cshtml文件,在该文件中,用户可以将列表导出为.xsl文件。

与所有其他视图一样,这个cshtml文件被我的_Layout.cshtml包围,它直接在我的应用程序的导航条中包含LogOff内置函数的调用,代码如下:

代码语言:javascript
复制
<li>
    @using (Html.BeginForm("LogOff", "Account"))
    {
        @Html.AntiForgeryToken()
        <button type="submit"><i class="fa fa-power-off" aria-hidden="true"></i></button>
    }
</li>

AntiForgeryToken在这里是因为注销函数需要它。

为了使文件可下载,我使用Response.AddHeader函数,如下所示:

代码语言:javascript
复制
public void ExportListFromTsv(List<FICHECONGE> data)
{
    Response.ClearContent();
    Response.AddHeader("content-disposition", "attachment;filename=FicheConges.xls");
    Response.AddHeader("Content-Type", "application/vnd.ms-excel");
    Tools.WriteTsv(data, Response.Output);
    Response.End();
}

Tools.WriteTsv()函数如下:

代码语言:javascript
复制
public static 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();
    }
}

xls文件是正确生成和下载的,但在此之后,我的应用程序尝试通过控制器重定向当前页面上的用户。我的问题是,此时,在加载_Layout.cshtml时,在@Html.AntiForgeryToken()行中会出现一个错误:

System.Web.HttpException:“服务器不能在header被发送后追加标头。”

我不能正确理解这个问题。据我所知,Response.End()函数发送我的标头,但是@Html.AntiForgeryToken()函数试图添加标头,而不能添加它们,因为它们已经发送了,是吗?

因此,我认为我只需删除Response.End(),因为标题无论如何都会在页面加载时发送。此时,我没有收到任何错误,我的文件被正确下载。但是它包含页面的所有html代码,而不仅仅是列表中的数据。

如何使用AntiForgeryToken()系统下载文件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-04 13:39:39

我可以建议一个快速而好的选择,您可以跳过此特定操作的验证。怎么做是可以在这里检查的。ignore forgery token mvc

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57788757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档