将ASP.NET Core Web API部署到Plesk时的404及接口响应问题排查
问题分析与解决方案
核心原因
保留<handlers>节点时,所有请求都会被AspNetCoreModuleV2转发到.NET Core进程处理,但你的项目未配置静态文件中间件,导致index.html这类静态文件请求找不到对应处理逻辑,返回404;而接口请求因为有控制器/路由匹配,能正常响应。
移除<handlers>节点后,静态文件直接由IIS接管处理,所以index.html能正常显示,但接口请求无法转发到.NET Core进程,自然得不到响应。
解决方法
要同时兼容静态文件和接口请求,需完成两步配置:
- 保留web.config中的
<handlers>节点,确保所有请求都进入.NET Core管道 - 在ASP.NET Core项目中添加静态文件中间件,让应用能处理静态文件请求
修改后的web.config(无需移除handlers)
<configuration> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\Test.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" /> <defaultDocument> <files> <clear /> <add value="index.html" /> </files> </defaultDocument> </system.webServer> </configuration>
(注:修正了arguments里的冗余路径\.\,改为标准的.\Test.dll)
在Program.cs中添加静态文件中间件
打开项目的Program.cs,在路由配置前添加静态文件处理逻辑:
var builder = WebApplication.CreateBuilder(args); // 添加控制器服务(适配你的接口路由) builder.Services.AddControllers(); var app = builder.Build(); // 优先添加静态文件中间件,处理静态资源请求 app.UseStaticFiles(); // 配置默认文档,访问根路径时自动匹配index.html app.UseDefaultFiles(new DefaultFilesOptions { DefaultFileNames = new List<string> { "index.html" } }); // 配置控制器路由端点 app.MapControllers(); app.Run();
补充说明
UseStaticFiles()默认读取项目的wwwroot目录,确保你的index.html放在该文件夹下- 如果静态文件不在
wwwroot,可通过参数指定路径:app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider("你的静态文件目录绝对路径") }) UseDefaultFiles()必须放在UseStaticFiles()之前,否则默认文档规则不会生效
内容的提问来源于stack exchange,提问作者Shahin Babayev
相关产品推荐
相关产品推荐

