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

Umbraco 10中RenderController路由配置后出现404错误求助

Umbraco 10自定义RenderController路由404问题解决

问题原因

RenderController是Umbraco专为渲染内容节点设计的控制器,其路由逻辑依赖Umbraco自身的内容路由系统,和普通MVC控制器的路由机制不兼容。直接给RenderController添加自定义路由会和Umbraco的路由规则冲突,导致404错误。

解决方案

方案1:改用普通MVC控制器(推荐)

如果你的接口不需要处理Umbraco内容节点的渲染逻辑,直接继承普通Controller或ControllerBase即可,无需使用RenderController:

public class NewsArticleController : Controller
{
    private readonly IUmbracoContextAccessor _umbracoContextAccessor;
    private readonly UmbracoHelper _umbracoHelper;

    public NewsArticleController(IUmbracoContextAccessor umbracoContextAccessor, UmbracoHelper umbracoHelper)
    {
        _umbracoContextAccessor = umbracoContextAccessor;
        _umbracoHelper = umbracoHelper;
    }

    [HttpGet]
    [Route("/NewsArticle/Show/{category}")]
    public IActionResult Show(string category)
    {
        return Content("Hello world - looking for " + category);
    }
}

可以移除Startup.cs中重复的路由配置(Attribute路由已足够),若保留也不会冲突,但建议保持配置单一性。

方案2:若必须使用RenderController(处理内容节点)

如果你需要借助RenderController访问Umbraco上下文和内容节点,需让路由匹配Umbraco的内容结构,或通过Umbraco的自定义路由扩展注册:

  1. 确保路由对应一个真实的Umbraco内容节点(比如名为NewsArticle的文档类型节点)
  2. 使用Umbraco的RouteTableBuilder在组件中注册路由,而非直接在WithEndpoints中添加:
public class CustomRouteComponent : IComponent
{
    private readonly IRouteTableBuilder _routeTableBuilder;

    public CustomRouteComponent(IRouteTableBuilder routeTableBuilder)
    {
        _routeTableBuilder = routeTableBuilder;
    }

    public void Initialize()
    {
        _routeTableBuilder.MapControllerRoute(
            name: "Article-List",
            pattern: "/NewsArticle/Show/{category}",
            defaults: new { Controller = "NewsArticle", Action = "Show" });
    }

    public void Terminate() { }
}

// 在Startup.cs中注册组件
builder.Services.AddUmbraco(_env, _config)
    .AddBackOffice()
    .AddWebsite()
    .AddComposers()
    .AddComponent<CustomRouteComponent>() // 添加自定义路由组件
    .Build();

额外检查项

  • 确认项目无编译错误,已重新生成并运行
  • 检查Umbraco后台是否存在路径为/NewsArticle/Show的内容节点,若存在会优先被Umbraco路由拦截
  • 确保控制器命名符合MVC约定(NewsArticleController对应路由中的Controller="NewsArticle")

内容的提问来源于stack exchange,提问作者Jojo-Ohio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:53:34