gpt4 book ai didi

c# - 静态文件不通过 .NET Core WebAPI 在 Azure WebApp 中提供

转载 作者:行者123 更新时间:2023-12-02 08:16:05 25 4
gpt4 key购买 nike

我将 .NET Core WebAPI 应用程序部署到 Azure WebApp。另外,在同一个根文件夹中,我部署了一个静态服务的 React 应用程序,并附带 index.html文件:

Files and Folders

当尝试访问此文件时,以及当我显式调用 /index.html 时,我在根目录上收到 404 错误

我已经添加了静态文件服务中间件:

var app = builder.Build();
app.UseCors();
app.UseHttpsRedirection();
app.UseFileServer();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();

有趣:当我编辑 web.config 文件时

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\MyAppWebService.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>

这样<handlers><add path=使用 api 前缀(如 path="api" ),静态文件确实得到服务(大概是因为这些请求不会到达实际的 .NET Core WebAPI 应用程序。

我还添加了一个“info”端点来检查 ContentRoot,但那里一切似乎都很好:

[ApiController]
public class InfoController : ControllerBase
{
private readonly IConfiguration config;

public InfoController(IConfiguration config)
{
this.config = config;
}

[Route("api/info")]
[HttpGet]
public IActionResult Info()
{
try
{
return Ok(new
{
ContentRoot = config.GetValue<string>(WebHostDefaults.ContentRootKey)
});
}
catch (Exception exc)
{
return McClientUtils.CreateErrorResponse(exc);
}
}
}

其产量符合预期:{"contentRoot":"C:\\home\\site\\wwwroot\\"}

我需要做什么才能将静态文件与 /api 一起提供来电?

最佳答案

您必须在中间件配置中添加几行代码。

例如,对于放置在根目录中的静态内容(您的情况),只需使用以下代码:

 app.UseFileServer(new FileServerOptions
{
FileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory()),
RequestPath = "",
EnableDefaultFiles = true
});

否则,如果静态内容位于子目录中(例如 StaticFiles),则只需使用此版本:

app.UseFileServer(new FileServerOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "StaticFiles")),
RequestPath = "/StaticFiles",
EnableDefaultFiles = true
});

关于c# - 静态文件不通过 .NET Core WebAPI 在 Azure WebApp 中提供,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73732779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com