为何我的.NET 7 Razor Pages应用抛出AmbiguousMatchException异常?
解决.NET 7 Web应用中GET请求路由歧义异常问题
问题原因
你的代码中MapRazorPages()已为Index页面注册了默认路由,而MapFallbackToPage("/Index")又额外注册了一个指向该页面的回退端点。当访问非根路径时,路由系统匹配到两个均指向Index页面的端点,触发AmbiguousMatchException歧义异常。
解决方案
方案一:修改Razor页面路由(推荐)
通过给Index页面设置通配符路由模板,让它直接匹配所有请求路径:
- 打开
Index.cshtml,修改顶部的@page指令:
@page "/{*path}" @model IndexModel @{ ViewData["Title"] = "Home page"; }
- 编辑
Program.cs,移除app.MapFallbackToPage("/Index");这一行,仅保留MapRazorPages()即可。
方案二:调整回退路由注册顺序
若不想修改Razor页面路由,可调整路由注册顺序,让回退路由优先捕获未匹配的请求:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); var app = builder.Build(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); // 先注册回退路由,再注册Razor页面路由 app.MapFallbackToPage("/{*path}", "/Index"); app.MapRazorPages(); app.Run();
验证
修改完成后,访问https://localhost:7024/或https://localhost:7024/anythingelse等任意路径,都会正常返回Index页面,不再抛出歧义异常。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

