验证防伪令牌内部功能

问题描述

我正在使用.netcore 3.0,目前我有一个API,该API可以接受外部(不带Antiforgery令牌)和内部(带Antiforgery令牌)调用在这种情况下,我需要在api方法添加[IgnoreAntiforgeryToken]根据请求确定是否检查防伪令牌。

是否想知道是否有任何方法可以验证api函数中的防伪令牌?预先感谢。

解决方法

据我所知,如果要调用Antiforgery类来验证防伪令牌,则可以直接在api中调用IAntiforgery服务,然后使用ValidateRequestAsync来验证令牌。

更多详细信息,您可以参考以下代码:

1。在startup.cs ConfigureServices方法中添加services.AddHttpContextAccessor();

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();
    }

}
,

我使用与@Brando Zhang类似的方法

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