Проверка токена защиты от подделки внутри функции

#asp.net-core #model-view-controller #.net-core #antiforgerytoken

#asp.net-ядро #модель-представление-контроллер #.net-ядро #antiforgerytoken

Вопрос:

Я использую .netcore 3.0, в настоящее время у меня есть API, который будет принимать внешние (без токена защиты от подделки) и внутренние (с токеном защиты от подделки) вызовы, в этом случае мне нужно будет добавить [IgnoreAntiforgeryToken] в метод api и на основе запроса определить, следует ли проверять токен защиты от подделки.

Хотелось бы знать, можно ли в любом случае проверить токен защиты от подделки внутри функции api? Заранее спасибо.

Ответ №1:

Насколько я знаю, если вы хотите вызвать класс защиты от подделки для проверки токена защиты от подделки, вы можете напрямую вызвать службу IAntiforgery в своем API, а затем использовать ValidateRequestAsync для проверки токена.

Более подробную информацию вы можете найти в приведенных ниже кодах:

1. Добавьте services.AddHttpContextAccessor(); метод startup.cs ConfigureServices

2. Добавьте приведенные ниже коды в свой контроллер:

 public class HomeController : Controller
{
    private readonly IAntiforgery _antiforgery;
    private readonly IHttpContextAccessor _httpcontextaccessor;
    public HomeController(IAntiforgery defaultAntiforgery, IHttpContextAccessor httpcontextaccessor)
    {
      

        _antiforgery = defaultAntiforgery;
        _httpcontextaccessor = httpcontextaccessor;

    }
    public async Task<IActionResult> PrivacyAsync()
    {

        try
        {
            await _antiforgery.ValidateRequestAsync(_httpcontextaccessor.HttpContext);

        }
        catch (Exception)
        {

            throw;
        }



        return View();
    }

}
  

Комментарии:

1. Спасибо за ответ, я узнал об этом сегодня утром и забыл обновить поток. Я использую аналогичный метод.

Ответ №2:

Я использую тот же метод, что и @Brando Zhang

 var _antiforgery=(IAntiforgery)this.HttpContext.RequestServices.GetService(typeof(IAntiforgery));
var IsValid = _antiforgery.IsRequestValidAsync(this.HttpContext).Resu<
return IsValid;