自定义属性从.net Framework迁移到.net Core



我有这样的代码

public class ExcludeFromProdAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
var lang = filterContext.RouteData.Values["lang"].ToString().ToLower();
if (string.IsNullOrEmpty(lang) || (lang != "eng" && lang != "fra"))
lang = "eng";
if (ConfigurationManager.AppSettings["org-environment"].ToUpper() == "PROD")
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{"lang", lang },
{"controller", "Checkout"},
{"action", "Error"},
{"errorcode", "Cardinal" }
}
);
}
}
}

我想把它转换成。net Core。不幸的是,我没有时间重写整个应用程序,而且由于一些组织限制——这需要转移到。net核心。

我查找了AuthorizationContext,似乎我需要使用的对象是"AuthorizationHandlerContext"然而,它甚至使方法签名无效。

一些帮助或指导将不胜感激!

这是asp.net core的类似实现:

public class ExcludeFromProdAttribute : AuthorizeAttribute, IAuthorizationFilter
{
private readonly IConfiguration _configuration;
public ExcludeFromProdAttribute(IConfiguration configuration)
{
_configuration = configuration;
}
public void OnAuthorization(AuthorizationFilterContext context)
{
var lang = context.RouteData.Values["lang"]?.ToString()?.ToLower();
if (string.IsNullOrEmpty(lang) || (lang != "eng" && lang != "fra"))
lang = "eng";
if (_configuration.GetValue<string>("org-environment").Equals("prod", StringComparison.OrdinalIgnoreCase))
{
context.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{"lang", lang },
{"controller", "Checkout"},
{"action", "Error"},
{"errorcode", "Cardinal" }
}
);
}
}
}

最新更新