部署Blazor WebAssembly后API无响应问题求助
环境信息
- 应用:Blazor Web Assembly PWA,基于.NET 6.0
- API:Rest Api .NET Core,基于.NET 5.0
- WEB地址:localtesting.mydomain.com
- API地址:localtesting.mydomain.com/api(虚拟目录)
问题描述
创建虚拟目录并上传API后可正常运行,但将Blazor WASM上传至根目录后API停止响应,推测是Blazor的web.config重写规则导致URL被重定向。修改web.config未解决问题,需添加规则避免API请求被拦截。
当前web.config内容:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <staticContent> <remove fileExtension=".blat" /> <remove fileExtension=".dat" /> <remove fileExtension=".dll" /> <remove fileExtension=".json" /> <remove fileExtension=".wasm" /> <remove fileExtension=".woff" /> <remove fileExtension=".woff2" /> <mimeMap fileExtension=".blat" mimeType="application/octet-stream" /> <mimeMap fileExtension=".dll" mimeType="application/octet-stream" /> <mimeMap fileExtension=".dat" mimeType="application/octet-stream" /> <mimeMap fileExtension=".json" mimeType="application/json" /> <mimeMap fileExtension=".wasm" mimeType="application/wasm" /> <mimeMap fileExtension=".woff" mimeType="application/font-woff" /> <mimeMap fileExtension=".woff2" mimeType="application/font-woff" /> </staticContent> <httpCompression> <dynamicTypes> <add mimeType="application/octet-stream" enabled="true" /> <add mimeType="application/wasm" enabled="true" /> </dynamicTypes> </httpCompression> <rewrite> <rules> <rule name="Serve subdir"> <match url=".*" /> <action type="Rewrite" url="wwwroot\{R:0}" /> </rule> <rule name="SPA fallback routing" stopProcessing="true"> <match url=".*" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> </conditions> <action type="Rewrite" url="wwwroot\" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
相关截图说明:
- 未发布Blazor WebAssembly时的API响应
- Plesk上上传Blazor WebAssembly后的状态
- 上传Blazor WebAssembly后的情况
- 无数据状态
解决方案
在web.config的rewrite规则最顶部添加一条跳过API路径的规则,让所有以/api开头的请求直接跳过重写,交给虚拟目录处理:
修改后的web.config:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <staticContent> <remove fileExtension=".blat" /> <remove fileExtension=".dat" /> <remove fileExtension=".dll" /> <remove fileExtension=".json" /> <remove fileExtension=".wasm" /> <remove fileExtension=".woff" /> <remove fileExtension=".woff2" /> <mimeMap fileExtension=".blat" mimeType="application/octet-stream" /> <mimeMap fileExtension=".dll" mimeType="application/octet-stream" /> <mimeMap fileExtension=".dat" mimeType="application/octet-stream" /> <mimeMap fileExtension=".json" mimeType="application/json" /> <mimeMap fileExtension=".wasm" mimeType="application/wasm" /> <mimeMap fileExtension=".woff" mimeType="application/font-woff" /> <mimeMap fileExtension=".woff2" mimeType="application/font-woff" /> </staticContent> <httpCompression> <dynamicTypes> <add mimeType="application/octet-stream" enabled="true" /> <add mimeType="application/wasm" enabled="true" /> </dynamicTypes> </httpCompression> <rewrite> <rules> <!-- 跳过API路径的重写,直接交由虚拟目录处理 --> <rule name="Skip API Requests" stopProcessing="true"> <match url="^api/(.*)" /> <action type="None" /> </rule> <rule name="Serve subdir"> <match url=".*" /> <action type="Rewrite" url="wwwroot\{R:0}" /> </rule> <rule name="SPA fallback routing" stopProcessing="true"> <match url=".*" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> </conditions> <action type="Rewrite" url="wwwroot\" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
规则说明
- 新增的
Skip API Requests规则会匹配所有以api/开头的URL,stopProcessing="true"确保匹配后不再执行后续重写规则,直接将请求传递给对应的虚拟目录。 - 该规则必须放在所有重写规则的最前面,保证API请求优先被识别。
内容的提问来源于stack exchange,提问作者H.M.Mubashir
相关产品推荐
相关产品推荐

