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

如何将Geta NotFound Handler默认重定向类型改为永久重定向?

如何将Geta NotFoundHandler的默认重定向类型改为永久重定向

我正在使用Geta.NotFoundHandler.Optimizely(版本5.0.8),希望将默认重定向类型从临时重定向改为永久重定向。目前创建新重定向URL时可通过下拉菜单手动修改类型,但我希望默认即为永久重定向。查阅官方仓库后未找到直接解决方案,我的模块代码如下:

public class GetaNotFoundHandlerModule : FeatureModule
{
    private readonly string _connectionString;

    public GetaNotFoundHandlerModule(IConfiguration configuration)
    {
        Enabled = Enabled ?? true;
        _connectionString = configuration.GetConnectionString("EPiServerDB");
    }

    public override void ConfigureServices(ServiceContext context)
    {
        context.Services.AddNotFoundHandler(options =>
        {
            options.UseSqlServer(_connectionString);
            options.HandlerMode = FileNotFoundMode.On;
            options.Logging = LoggerMode.Off;
            options.AddProvider<LegacyFundDetailRedirectHandler>();
            options.AddProvider<CultureProfileRedirectHandler>();
        });
        context.Services.AddOptimizelyNotFoundHandler();
    }

    public override void Configure(IApplicationBuilder app)
    {
        base.Configure(app);

        app.UseNotFoundHandler();
    }

    public override void ConfigureWebRoutes(IEndpointRouteBuilder routes)
    {
        base.ConfigureWebRoutes(routes);

        routes.MapRazorPages();
    }
}

解决方案

方案1:通过自定义仓储修改默认值

创建自定义的RedirectRepository,重写Create方法,强制设置默认重定向类型为永久:

public class CustomRedirectRepository : SqlServerRedirectRepository
{
    public CustomRedirectRepository(string connectionString) : base(connectionString)
    {
    }

    public override Redirect Create(Redirect redirect)
    {
        // 若未指定重定向类型,默认设为永久
        if (redirect.RedirectType == RedirectType.Temporary)
        {
            redirect.RedirectType = RedirectType.Permanent;
        }
        return base.Create(redirect);
    }
}

然后在模块的ConfigureServices方法中替换默认仓储服务:

public override void ConfigureServices(ServiceContext context)
{
    context.Services.AddNotFoundHandler(options =>
    {
        options.UseSqlServer(_connectionString);
        options.HandlerMode = FileNotFoundMode.On;
        options.Logging = LoggerMode.Off;
        options.AddProvider<LegacyFundDetailRedirectHandler>();
        options.AddProvider<CultureProfileRedirectHandler>();
    });
    // 替换默认仓储为自定义实现
    context.Services.Replace(ServiceDescriptor.Scoped<IRedirectRepository, CustomRedirectRepository>(sp => 
        new CustomRedirectRepository(_connectionString)));
    context.Services.AddOptimizelyNotFoundHandler();
}

方案2:修改后台视图默认选中项

如果需要同时修改后台UI的默认选中值,可复制官方的Create.cshtml视图到项目的/Views/Redirects/路径下,修改下拉框的默认选中项:

<select asp-for="RedirectType" class="form-control">
    <option value="@(int)RedirectType.Permanent" selected>永久重定向 (301)</option>
    <option value="@(int)RedirectType.Temporary">临时重定向 (302)</option>
</select>

这样在后台创建新重定向时,默认会选中永久重定向选项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:47:49