[blazor webassembly] 파일 업로드시 에러 405에러

안녕하세요
c#으로 winform만 해보다가 웹앱을 공부하게 되어 blazor webassembly를 공부하고 있습니다.

다름이 아니라, 파일 업로드기능을 구현해보고자 안쓰는 노트북을 IIS로 만들었고 여기에 업로드 하고자 하는데요,

클라이언트가 되는 PC에서 파일을 선택하고 업로드를 누르면
개발자도구 콘솔창에서 POST http://주소/api/upload 405(Method Not Allowed) 이렇게 출력됩니다.

현재 작성중인 blazor webassembly 프로젝트에는 클라이언트쪽 코드(upload.razor)와 서버쪽 코드(uploadController.cs) 이렇게 두개를 두고 api/upload 경로로 일치시켜서 사용하고 있는데, 웹 통신에 대한 지식이 부족하다보니 문제 해결이 어렵네요.
해볼만한 조치는 해본 것 같은데 도저히 원인을 찾을 수 없어 문의드립니다.

  1. IIS 의 폴더 보안 권환 전부 허용
  2. 방화벽 포트 예외처리

//UploadController…cs
//서버측 코드 (ASP…NET Core Web API)

using Microsoft.AspNetCore.Mvc;

[Route(“api/upload”)]
[ApiController]
public class UploadController : ControllerBase
{
[HttpPost, HttpGet]
public async Task Post()
{
var files = Request.Form.Files;
var uploadPath = Path.Combine(Directory.GetCurrentDirectory(), “Uploads”);//@“…/Publish/wwwroot/Test Folder”

    if (!Directory.Exists(uploadPath)) Directory.CreateDirectory(uploadPath);

    foreach (var file in files)
    {
        var filePath = Path.Combine(uploadPath, file.FileName);
        using (var stream = new FileStream(filePath, FileMode.Create))
        {
            await file.CopyToAsync(stream);
        }
    }
    return Ok();
}

}

//Upload…razor
//클라이언트측 코드 (Blazor Webassembly)

@code {
private List selectedFiles = new List();
private bool uploading = false;
private string successMessage;
private string errorMessage;

private void HandleSelectedFiles(InputFileChangeEventArgs e)
{
    foreach (var file in e.GetMultipleFiles())
    {
        selectedFiles.Add(file);
    }
}

private async Task UploadFiles()
{
    uploading = true;
    var content = new MultipartFormDataContent();

    foreach (var file in selectedFiles)
    {
        var fileContent = new StreamContent(file.OpenReadStream());
        content.Add(fileContent, "files", file.Name);
    }

    var response = await Http.PostAsync("api/upload", content);
    uploading = false;

    if (response.IsSuccessStatusCode)
    {
        // 예: 사용자에게 성공 메시지 표시
        successMessage = $"{selectedFiles.Count} files uploaded successfully.";
        selectedFiles.Clear(); // 파일 목록 초기화
    }
    else
    {
        // 예: 오류 메시지 표시
        errorMessage = "Error occurred while uploading files.";
    }
}

}

2 Likes