部署Blazor WebAssembly后,Plesk服务器上的Asp.Net API停止响应求助
解决Blazor WebAssembly部署后虚拟目录中ASP.NET Core API停止响应的问题
一、先排查路由拦截问题
Blazor WASM默认的web.config里有重写规则,会把没匹配到静态文件的请求都转到index.html,这直接会把虚拟目录里的API请求给截胡了。直接改Blazor的web.config,加个排除规则,让API的虚拟目录路径跳过重写:
<rewrite> <rules> <rule name="Blazor Routes" stopProcessing="true"> <match url=".*" /> <conditions logicalGrouping="MatchAll"> <!-- 把下面的「你的API虚拟目录名」换成实际的目录名 --> <add input="{REQUEST_URI}" pattern="^/你的API虚拟目录名/" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="index.html" /> </rule> </rules> </rewrite>
另外要确认API的虚拟目录在IIS里是独立应用程序,不是单纯的虚拟目录——右键虚拟目录选「转换为应用程序」,用独立的应用程序池。
二、检查应用程序池配置
- 确认API的应用程序池用的是正确的.NET版本:比如.NET Core项目要选「No Managed Code」或者对应版本的CLR。
- 看看部署Blazor后,API的应用程序池身份有没有被改,权限不够会导致API没法访问资源。
- 直接重启API的应用程序池,说不定就能恢复响应。
三、排查静态文件中间件冲突
如果API和Blazor共享站点的静态文件配置,可能会导致API请求被静态文件中间件误处理:
- 检查API的
Program.cs里的静态文件配置,不需要的话直接删掉app.UseStaticFiles();,或者限定路径只处理API自身的静态文件。 - 确保Blazor的静态文件中间件只处理根目录资源,不碰API的虚拟目录路径。
四、验证请求路径和站点绑定
- 用Postman测API时,一定要用完整的虚拟目录路径,比如
http://服务器地址/API虚拟目录/api/xxx,别用根路径瞎测。 - 检查IIS站点的绑定,部署Blazor后有没有改端口、主机头,导致API的请求进不来。
五、看日志找具体问题
- 查API的日志文件(默认在项目的
Logs目录,或者Windows事件查看器的应用程序日志),有没有启动失败、报错信息。 - 看IIS的日志(一般在
C:\inetpub\logs\LogFiles),查API请求的状态码,确认请求到底是被拦截了,还是到了API但出错了。
内容的提问来源于stack exchange,提问作者Muzammil Ismail
相关产品推荐
相关产品推荐

