You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC启动时未触发HomeController的Index动作原因排查

ASP.NET MVC默认路由不触发的问题解决

问题描述

启动ASP.NET MVC应用时,访问根路径不会触发HomeController的Index动作,但手动输入URL Home/Index 时功能正常运行。

用户提供的Startup.cs端点配置代码如下:

app.UseEndpoints(endpoints =>
{
    // endpoints.MapControllers();
    endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");

    // Blazor
    endpoints.MapFallbackToPage("/_Host");
    endpoints.MapBlazorHub();
});

原因分析

问题出在路由配置的顺序上:MapFallbackToPage("/_Host")会捕获所有未被匹配的请求,包括根路径的默认路由请求。由于它配置在MVC默认路由之后,当访问根路径时,请求先被Blazor的回退页面拦截,没有机会走到MVC的路由规则。

解决方案

方案一:调整路由配置顺序

将Blazor相关的路由配置放在MVC默认路由之前,这样MVC的默认路由会优先匹配根路径请求:

app.UseEndpoints(endpoints =>
{
    // Blazor
    endpoints.MapFallbackToPage("/_Host");
    endpoints.MapBlazorHub();

    // MVC 默认路由
    endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");
});

方案二:给Blazor回退路由添加约束

如果需要保留原有配置顺序,可以给MapFallbackToPage添加路径约束,让它只拦截非文件类型的路径请求,避免影响MVC默认路由:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");

    // Blazor - 仅拦截非文件的路径请求
    endpoints.MapFallbackToPage("/{*path:nonfile}", "/_Host");
    endpoints.MapBlazorHub();
});

这样修改后,访问根路径时会优先匹配MVC的默认路由,触发HomeController的Index动作;而Blazor的回退路由只会处理那些没有匹配到MVC路由或静态文件的请求。

内容的提问来源于stack exchange,提问作者Nishant Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 05:32:13