验证防伪令牌内部功能
Verify Antiforgery Token Inside Function
我正在使用 .netcore 3.0,目前我有一个 API 可以接受外部(没有防伪令牌)和内部(有防伪令牌)调用,在这种情况下我需要添加 [IgnoreAntiforgeryToken ]在api方法上根据请求判断是否检查防伪令牌。
想知道 api 函数中是否有验证防伪令牌的方法?提前致谢。
据我所知,如果您想调用 Antiforgery class 来验证防伪令牌,您可以直接在 api 中调用 IAntiforgery 服务,然后使用 ValidateRequestAsync 来验证令牌。
更多详情,您可以参考以下代码:
1.Add services.AddHttpContextAccessor();
在 startup.cs ConfigureServices 方法中
2.Add 控制器中的以下代码:
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;
我正在使用 .netcore 3.0,目前我有一个 API 可以接受外部(没有防伪令牌)和内部(有防伪令牌)调用,在这种情况下我需要添加 [IgnoreAntiforgeryToken ]在api方法上根据请求判断是否检查防伪令牌。
想知道 api 函数中是否有验证防伪令牌的方法?提前致谢。
据我所知,如果您想调用 Antiforgery class 来验证防伪令牌,您可以直接在 api 中调用 IAntiforgery 服务,然后使用 ValidateRequestAsync 来验证令牌。
更多详情,您可以参考以下代码:
1.Add services.AddHttpContextAccessor();
在 startup.cs ConfigureServices 方法中
2.Add 控制器中的以下代码:
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;