部署Blazor Client WebAssembly至IIS后刷新URL出现404问题求助
Blazor WebAssembly IIS部署后刷新/直接访问子路由404问题解决方法
这个问题的核心是Blazor WebAssembly作为单页应用(SPA),所有路由逻辑都在客户端处理。当你刷新页面或直接输入子URL时,浏览器会向IIS发送物理路径请求,但服务器上不存在对应文件,因此返回404。以下是具体解决步骤:
1. 安装IIS URL重写模块
首先确保你的IIS服务器已经安装了URL重写模块:
- 打开IIS管理器,查看左侧“模块”列表,确认有“URL Rewrite”项;
- 如果没有,通过Web平台安装程序搜索并安装“URL Rewrite 2.0”。
2. 添加URL重写规则到web.config
在Blazor应用的发布根目录(通常是wwwroot文件夹)中创建或修改web.config文件,添加以下重写规则,将所有请求导向index.html:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <staticContent> <mimeMap fileExtension=".blat" mimeType="application/octet-stream" /> <mimeMap fileExtension=".dll" mimeType="application/octet-stream" /> <mimeMap fileExtension=".dat" mimeType="application/octet-stream" /> <mimeMap fileExtension=".pdb" mimeType="application/octet-stream" /> <mimeMap fileExtension=".wasm" mimeType="application/wasm" /> <mimeMap fileExtension=".woff" mimeType="application/font-woff" /> <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" /> </staticContent> <rewrite> <rules> <rule name="Serve Blazor SPA" stopProcessing="true"> <match url=".*" /> <conditions logicalGrouping="MatchAll"> <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> </system.webServer> </configuration>
这个规则会排除真实存在的文件和目录,只将非物理资源的请求转发到index.html,让Blazor客户端路由处理。
3. 检查IIS应用程序池配置
确保站点对应的应用程序池设置正确:
- 打开IIS管理器,找到应用程序池,右键选择“高级设置”;
- 将“.NET CLR版本”设置为**“无托管代码”**,因为Blazor WebAssembly不需要服务器端.NET运行时支持。
4. 验证base href配置
你已经设置了<base href="/" />,确认这个配置正确:
- 该标签必须放在
index.html的<head>中,且href值要匹配IIS站点的根路径(如果站点是虚拟目录,需要改为对应路径,比如<base href="/MyBlazorApp/" />)。
完成以上步骤后,重启IIS站点,刷新或直接访问子路由就能正常加载页面了。
内容的提问来源于stack exchange,提问作者Musaffar Patel
相关产品推荐
相关产品推荐

