如何将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
相关产品推荐
相关产品推荐

