在这种情况下,我有一个“索引”剃刀页面,要求用户输入IFormFile。用户单击,然后选择要上传的文件。
在OnPostAsync方法中,我读取了这个大文本文件(200K +),并希望将结果发送到下一个Razor页面进行处理。
return RedirectToPage("ConsolidationReport", new {fileContents});
但这只是给我们一个尺寸限制错误
HTTP错误502.3-错误的网关内部响应标头的大小限制 被超过
尝试重定向IFormFile也不起作用。
return RedirectToPage("ConsolidationReport", new { report = Input.InquiriesReport });
没有错误,但是接收的OnGet为空。
如果我在重定向之前处理数据并生成输出,我会得到
HTTP错误404.15-找不到请求过滤模块是 配置为拒绝查询字符串太长的请求。
那么,什么是正确的方法呢?我正在寻找最佳实践指导。
我应该读取文件,然后创建一个新的IFormFile并发送到我的目标页面吗?我是否应该提高所有请求的限制? 存放在临时存储区中吗?
谢谢大家!
答案 0 :(得分:0)
感谢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; }
}
询问报告参数的页面非常简单。
Index.cshtml.cs
public class PaymentReportPageModel : ReportPageModel
{
[BindProperty]
public ConsolidationModel Input { get; set; }
}
此处的窍门是通过指定asp-page =“ Report”使用目标页面 Index.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接收数据! Report.cshtml.cs
public class ConsolidationPageModel : ReportPageModel
{
[BindProperty]
public ConsolidationModel Input { get; set; }
public IActionResult OnPost()
{
// Use the data properly.
}