Đăng bởi Để lại phản hồi

Checklist bắt buộc cho Razor Pages upload file lớn

Nếu thiếu 1 bướcupload 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 enctypeupload 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

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *