Blazor WASM托管API请求未命中端点返回index.html问题咨询
以下是导致该异常行为的几个核心原因:
静态文件路由冲突
当请求的api/v1/groupstages/{id}/gamedays中,{id}对应的模型存在时,这个URL恰好和wwwroot目录下的某个静态资源路径(比如文件或空目录)匹配。ASP.NET Core的静态文件中间件优先级高于API路由,会直接返回静态资源(如果是目录可能返回index.html);而模型不存在的id对应的静态路径不存在,请求才会流转到API控制器。修改路由后缀后,静态资源路径不再匹配,请求自然能正常命中API。Blazor客户端路由误触发服务器 fallback
托管模式下的Blazor依赖服务器配置的app.MapFallbackToFile("index.html")来支持客户端路由。如果你的API请求URL格式和前端注册的客户端路由模板(比如/groupstages/{id}/gamedays)完全重合,当模型存在时前端可能有对应路由逻辑,服务器会误将API请求判定为客户端路由导航,返回index.html让前端处理。修改路由后缀后,客户端无对应路由,服务器就不会触发fallback机制。路由注册顺序导致的匹配优先级问题
ASP.NET Core路由系统按注册顺序匹配规则。如果API路由的注册顺序晚于静态文件中间件或Blazor fallback路由,当请求URL同时满足多个匹配规则时,会优先走先注册的中间件。模型存在的id刚好触发了前面的匹配规则,模型不存在时则未触发,从而出现差异。调整路由注册顺序(先注册API路由,再注册静态文件和fallback)可解决,修改路由后缀本质是绕过了前面的匹配规则。
内容的提问来源于stack exchange,提问作者osiki96

