Nếu thiếu 1 bước → upload vẫn fail ❌
1️⃣ Program.cs (Razor Pages)
using Microsoft.AspNetCore.Http.Features;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.Configure<FormOptions>(options =>
{
options.MultipartBodyLengthLimit = 1024L * 1024L * 1024L; // 1GB
});
2️⃣ Kestrel – cực kỳ quan trọng
builder.WebHost.ConfigureKestrel(options =>
{
options.Limits.MaxRequestBodySize = 1024L * 1024L * 1024L; // 1GB
});
⚠️ Nếu bạn chạy IIS Express → bước này KHÔNG đủ
3️⃣ Razor Page Model – PHẢI CÓ attribute
❌ Sai (rất nhiều người mắc)
public class UploadModel : PageModel
{
public async Task<IActionResult> OnPostAsync(IFormFile file)
{
...
}
}
✅ ĐÚNG
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
[RequestSizeLimit(1024L * 1024L * 1024L)]
[RequestFormLimits(MultipartBodyLengthLimit = 1024L * 1024L * 1024L)]
public class UploadModel : PageModel
{
[BindProperty]
public IFormFile File { get; set; }
public async Task<IActionResult> OnPostAsync()
{
if (File == null)
return Page();
var path = Path.Combine("wwwroot/uploads", File.FileName);
using var stream = new FileStream(path, FileMode.Create);
await File.CopyToAsync(stream);
return Page();
}
}
📌 Razor Pages bắt buộc attribute phải đặt trên PageModel class,
đặt trên method đôi khi không có tác dụng ❗
4️⃣ Razor View (.cshtml) – rất hay bị quên
<form method="post" enctype="multipart/form-data">
<input type="file" asp-for="File" />
<button type="submit">Upload</button>
</form>
❌ Thiếu enctype → upload luôn fail
5️⃣ Nếu chạy IIS / IIS Express (90% lỗi nằm ở đây)
web.config
<configuration>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
</system.webServer>
</configuration>
📌 IIS mặc định chỉ 30MB