#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;