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

.NET 8升级至.NET 10后Orchard Core Blazor模块报405错误求助

解决Orchard Core Blazor模块升级.NET 10后405 Method Not Allowed错误
  • 检查Blazor Hub端点注册顺序
    .NET 10中Blazor Server的端点注册逻辑有细微调整,确保在模块的启动类或应用的Program.cs中,app.MapBlazorHub()的调用位置正确:要放在app.UseRouting()之后,app.UseEndpoints()之前,且早于Orchard Core的路由注册逻辑。如果是Orchard Core模块,需要在模块的Startup类的Configure方法中优先注册Blazor端点,避免被Orchard的路由系统拦截。

  • 修正CORS配置的完整性
    仅添加CORS策略但未启用中间件或配置SignalR所需的凭证支持,会导致协商请求失败。调整配置如下:

    // 注册CORS策略
    builder.Services.AddCors(options =>
    {
        options.AddPolicy("BlazorSignalRPolicy", policy =>
        {
            policy.WithOrigins("https://your-app-domain.com") // 生产环境指定具体域名
                  .AllowAnyMethod()
                  .AllowAnyHeader()
                  .AllowCredentials(); // SignalR必须启用凭证支持
        });
    });
    
    // 启用CORS中间件(位置很重要)
    app.UseCors("BlazorSignalRPolicy");
    
    // 映射Blazor Hub时绑定CORS策略
    app.MapBlazorHub().RequireCors("BlazorSignalRPolicy");
    
  • 排查安全元数据与路由冲突
    虽然配置了SuppressCheckForUnhandledSecurityMetadata,但需确保该配置在正确的时机添加:要在注册Blazor服务(builder.Services.AddServerSideBlazor())之后,且在添加MVC/Authorization服务之后。另外,检查模块中是否有自定义的授权中间件,可能误拦截了/_blazor/negotiate请求,可临时禁用授权验证测试是否恢复正常。

  • 验证Orchard Core版本兼容性
    确保使用的Orchard Core NuGet包版本支持.NET 10(推荐1.8.0及以上版本)。旧版本的Orchard Core在.NET 10环境下可能存在路由或中间件兼容性问题,导致Blazor协商请求被错误拦截。

  • 排除Orchard Core路由拦截
    在Orchard Core模块中,可通过注册路由时设置优先级,确保Blazor的/_blazor路由不被Orchard的路由系统处理。在模块的Startup类中添加:

    builder.Services.Configure<RouteOptions>(options =>
    {
        options.AppendTrailingSlash = false;
        options.LowercaseUrls = true;
        // 确保Blazor路由优先匹配
        options.RoutePrecedence.Add("/_blazor/{**path}", 1000);
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 13:33:18