Я реализовал пользовательский AuthorizationFilter в своем веб-API ASP.NET Core. Фильтр проверяет код в заголовке запроса и идентифицирует userID на основе кода.
Я хочу, чтобы этот userID повторно использовался в моем вызове GET/POST. Как я могу передать данные из моего AuthorizationFilter в мой метод вызова, чтобы избежать дублирования вызовов базы данных?
AuthorizationFilter функция:
public void OnAuthorization(AuthorizationFilterContext context)
{
string header = _httpContextAccessor.HttpContext.Request.Headers["CODE"].ToString();
int userID = GetAccessData(header);
//Want to use this UserID in my calling method
}
Функция вызова в моем контроллере:
[HttpGet]
public IActionResult UseData(Model modelObj)
{
// I want to use userID retrieved at filter level here.
}





передать данные из моего AuthorizationFilter в мой вызывающий метод
Ниже приведена рабочая демонстрация, я использую два варианта, вы можете обратиться к ней.
CustomAuthenticationFilter :
public class CustomAuthenticationFilter : Attribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationFilterContext context)
{
//you can use your userID
//Option 1
context.HttpContext.Items["userID"] = "1111111";
//Option 2
var userId = "22222";
context.RouteData.Values.Add("UserId", userId);
}
}
Действие:
[HttpGet]
[CustomAuthenticationFilter]
public IActionResult UseData()
{
// I want to use userID retrieved at filter level here.
var userID = HttpContext.Items["userID"];
var userid2 = RouteData.Values["UserId"];
return Ok(userID);
}
результат: