ASP.NET CORE WEB API webRootPath 问题

问题描述 投票:0回答:1

我使用 dotnet8 创建了新的 asp.net core Web API 项目。 我想使用 wwwroot 作为我的网络根路径。 我将此行添加到我的program.cs中:

app.UseStaticFiles();

我尝试在 Service.cs 中获取 wwwroot 路径,但得到的是 null 而不是路径:

webHostEnvironment.WebRootPath

我也尝试将此行添加到我的program.cs中,但结果是相同的:

builder.WebHost.UseStaticWebAssets().UseWebRoot("wwwroot");

我知道我可以得到像 that 这样的路径,但我想使用正确的方式并且不使用 that 自定义。

我的服务是:


namespace Infrastructure.Services;

public class LocalFileService(IWebHostEnvironment webHostEnvironment, ILogger<LocalFileService> logger) : IFileService
{
    public async Task<string> SaveFromBase64(string content, FilePlaces place = FilePlaces.Web,
        CancellationToken cancellationToken = default)
    {
        cancellationToken.ThrowIfCancellationRequested();
        string path, result, filename = GetFileExtension(content);
        switch (place)
        {
            default:
                result = $"/products/{Guid.NewGuid():N}.{filename}";
                path = Path.Combine(webHostEnvironment.ContentRootPath, "wwwroot", result);
                logger.LogInformation("saving file {path}", path);
                break;
        }

        await using var fileStream = new FileStream(path, FileMode.Create, FileAccess.Write);
        var bytes = Convert.FromBase64String(content);
        await fileStream.WriteAsync(bytes, cancellationToken);
        return result;
    }

    private static string GetFileExtension(string base64String)
    {
        var data = base64String.Substring(0, 5);

        switch (data.ToUpper())
        {
            case "IVBOR":
                return "png";
            case "/9J/4":
                return "jpg";
            case "AAAAF":
                return "mp4";
            case "JVBER":
                return "pdf";
            case "AAABA":
                return "ico";
            case "UMFYI":
                return "rar";
            case "E1XYD":
                return "rtf";
            case "U1PKC":
                return "txt";
            case "MQOWM":
            case "77U/M":
                return "srt";
            default:
                return string.Empty;
        }
    }
}
c# asp.net-web-api
1个回答
0
投票

试试这个。

string basedir = AppDomain.CurrentDomain.BaseDirectory;

WebApplicationOptions options = new()
{
  ContentRootPath = basedir,
  Args= args,
  WebRootPath = Path.Combine(basedir, "wwwroot")
};

var builder = WebApplication.CreateBuilder(options);
© www.soinside.com 2019 - 2024. All rights reserved.