【问题标题】:When using Razor Pages, How can I use RedirectToPage to transfer the contents of an IFormFile?使用 Razor Pages 时,如何使用 RedirectToPage 传输 IFormFile 的内容?
【发布时间】:2019-07-17 01:41:52
【问题描述】:

以下是场景,我有一个“索引”Razor 页面,它要求用户提供 IFormFile。用户单击,然后选择要上传的文件。

在 OnPostAsync 方法中,我读取了这个大文本文件 (200K+),并希望将结果发送到下一个 Razor 页面进行处理。

return RedirectToPage("ConsolidationReport", new {fileContents});

但这只是给我们一个大小限制错误

HTTP 错误 502.3 - 网关错误 内部响应标头大小限制 超过了

尝试重定向 IFormFile 也不起作用。

return RedirectToPage("ConsolidationReport", new { report = Input.InquiriesReport });

没有错误,但是接收的OnGet有null。

如果我在重定向之前处理数据并生成输出,我会得到

HTTP 错误 404.15 - Not Found 请求过滤模块是 配置为拒绝查询字符串过长的请求。

那么,正确的方法是什么?我正在寻找最佳实践指导。

我应该阅读该文件,并创建一个新的 IFormFile 以发送到我的目标页面吗?我应该提高所有请求的限制吗? 临时存放?

谢谢大家!

【问题讨论】:

  • 为什么要发布到一个不是首先处理数据的页面? ...只是一个腰部的资源来做重定向。而是直接从表单发布到正确的页面。此外,您可能想进一步澄清您在这里尝试做的事情,因为您所做的事情听起来很疯狂(除非我在这里遗漏了什么)。
  • 你知道LG儿子,有时你在森林里很深,看不到树。我对这个 Razor Page 的东西相当陌生,只是考虑将 Post 命令放在提出问题的页面上。甚至没有考虑将帖子放在目标页面上。
  • 太棒了,那你没有做疯狂的事,只是迷路了......在森林里:)

标签: asp.net-core


【解决方案1】:

感谢 LGSon 向我展示树木!

ConsolidationModel.cs

public class ConsolidationModel
{
    [DataType(DataType.Date)]
    public DateTime StartDate { get; set; }

    [DataType(DataType.Date)]
    public DateTime EndDate { get; set; }

    [DataType(DataType.Upload)]
    public IFormFile InquiriesReport { get; set; }
}

要求报表参数的页面变得非常简单。

索引.cshtml.cs

public class PaymentReportPageModel : ReportPageModel
{
    [BindProperty]
    public ConsolidationModel Input { get; set; }
}

这里的技巧是通过指定 asp-page="Report" 来使用目标页面 索引.cshtml

    <form method="post" class="form-horizontal" enctype="multipart/form-data">

            ** get start/end dates **

            <div class="form-group">
                <div class="col-md-3">
                    <label asp-for="Input.ReportFile" class="control-label"></label>:
                </div>
                <div class="col-md-9">
                    <input asp-for="Input.ReportFile" type="file" class="form-control" style="height: auto"/>
                </div>
            </div>

        </div>

        <div asp-validation-summary="All" class="text-danger"></div>

        <button asp-page="Report" type="submit" class="btn btn-primary">
            Execute
        </button>
    </form>

并使用第二个 BindProperty 来接收数据! 报告.cshtml.cs

public class ConsolidationPageModel : ReportPageModel
{
    [BindProperty]
    public ConsolidationModel Input { get; set; }

    public IActionResult OnPost()
    {
       // Use the data properly.
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-09
    • 2019-02-02
    • 1970-01-01
    • 2021-07-17
    • 2021-01-06
    • 2021-06-03
    • 2021-09-25
    • 2018-08-22
    相关资源
    最近更新 更多