【发布时间】:2023-01-08 02:19:15
【问题描述】:
使用 Net Core 7 我有带有 culture 路由参数的 Razor Pages:
@page "/{culture:validculture}/about"
我创建了一个自定义路由约束来检查 culture 是否具有有效值。
当 culture 值无效时,我将被重定向到 404 错误页面。
public class CultureRouteConstraint : IRouteConstraint {
private readonly RequestLocalizationOptions _options;
public CultureRouteConstraint(IOptionsSnapshot<RequestLocalizationOptions> options) {
_options = options.Value;
}
public Boolean Match(HttpContext? httpContext, IRouter? route, String routeKey, RouteValueDictionary values, RouteDirection routeDirection) {
String? culture = Convert.ToString(value, CultureInfo.InvariantCulture);
List<String>? cultures = _options.SupportedCultures?.Select(x => x.TwoLetterISOLanguageName).ToList();
if (culture != null && cultures != null)
return cultures.Contains(culture, StringComparer.InvariantCultureIgnoreCase);
}
}
如果我对有效文化进行硬编码,这会很好用,例如:
List<String>? cultures = new() { "en", "pt" };
但是如果我注入RequestLocalizationOptions,我会得到错误:
RouteCreationException: An error occurred while trying to create an instance of 'CultureRouteConstraint'.
也许我需要为此使用中间件?我怎样才能做到这一点?
【问题讨论】:
-
您是否向 DI 容器注册了 IOptionsSnapshot<RequestLocalizationOptions>?
标签: asp.net-core asp.net-core-middleware asp.net-core-routing asp.net-core-7.0