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

使用Umbraco 12时如何注册常规ASP.NET Core MVC控制器?

解决Umbraco 12中自定义ASP.NET Core MVC路由返回404的问题

问题出在Umbraco路由的匹配优先级上——UseWebsiteEndpoints()注册的Umbraco内容路由会优先捕获所有请求,导致你的自定义PayPal路由被覆盖了。按下面的方式调整代码就能解决:

  • 调整路由注册顺序:把自定义MVC路由的注册代码放到UseWebsiteEndpoints()之前,让自定义路由先被匹配。
  • 确认控制器类型:确保你的PayPalController是常规的ASP.NET Core MVC控制器(继承Controller基类,而非Umbraco的SurfaceController或RenderController)。

修改后的Configure方法代码:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseUmbraco()
        .WithMiddleware(u =>
        {
            u.UseBackOffice();
            u.UseWebsite();
        })
        .WithEndpoints(u =>
        {
            u.UseInstallerEndpoints();
            u.UseBackOfficeEndpoints();
            // 先注册自定义PayPal路由
            u.EndpointRouteBuilder.MapControllerRoute(
                "PayPal",
                "paypal/{action}",
                new { controller = "PayPal", action = "Index" });
            // 再注册Umbraco网站路由
            u.UseWebsiteEndpoints();
        });
}

如果你的控制器和Umbraco的控制器存在命名空间冲突,还可以在路由注册时指定命名空间,进一步明确匹配规则:

u.EndpointRouteBuilder.MapControllerRoute(
    "PayPal",
    "paypal/{action}",
    new { controller = "PayPal", action = "Index" })
    .AddArea("") // 空区域表示非区域控制器
    .RequireControllerNamespaces(new[] { "YourProjectNamespace.Controllers" });

这样调整后,访问/paypal或/paypal/[ActionName]时就会优先匹配你的自定义控制器,不会被Umbraco的404页面拦截了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:53:17