c# - 将防伪与 Ajax 或 AngularJs 结合使用

标签 c# asp.net-core

我安装了 Microsoft.AspNetCore.Antiforgery 我的 asp.net 核心 .net 框架应用程序,添加到配置服务

public void ConfigureServices(IServiceCollection services)
{
  // Add framework services.
  services.AddApplicationInsightsTelemetry(Configuration);
  services.AddTransient<ISession, JwtSession>(s => JwtSession.Factory());
  //services.AddCors();
  services.AddAntiforgery(options => options.HeaderName = "X-XSRF-TOKEN");
  services.AddMvc();
}

我想在 Controller 中使用它并按如下方式操作:

    [Route("[action]"), Route("")]
    [HttpGet]
    public IActionResult Index()
    {
      var f = _antiforgery.GetAndStoreTokens(HttpContext);
      return View();
    }

但是不知道怎么把key放到view里。

最佳答案

我想您希望 Antiforgery 与 Ajax 场景一起工作。下面是一个例子:

在 Startup.cs 中:

 // Angular's default header name for sending the XSRF token.
 services.AddAntiforgery(options => options.HeaderName = "X-XSRF-TOKEN");

生成防伪 token cookie 的过滤器:

public class GenerateAntiforgeryTokenCookieForAjaxAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext context)
    {
        var antiforgery = context.HttpContext.RequestServices.GetService<IAntiforgery>();

        // We can send the request token as a JavaScript-readable cookie, and Angular will use it by default.
        var tokens = antiforgery.GetAndStoreTokens(context.HttpContext);
        context.HttpContext.Response.Cookies.Append(
            "XSRF-TOKEN",
            tokens.RequestToken,
            new CookieOptions() { HttpOnly = false });
    }
}

过滤器的使用:

    [HttpGet]
    [GenerateAntiforgeryTokenCookieForAjax]
    public IActionResult Create()
    {
        return View();
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Create(Product product)
    {

关于c# - 将防伪与 Ajax 或 AngularJs 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38783976/

相关文章:

c# String.Compare 与 String.CompareOrdinal 对比

c# - 检测到冲突的更改。当尝试插入具有相同键的多个实体时可能会发生这种情况

c# - 以编程方式注入(inject)依赖asp.net core

c# - 为什么我必须在 ASP 5 中的 app.UseMvc 之前调用 app.UseErrorHandler 才能正常工作?

asp.net - 我们可以隐藏 Content-Security-Policy 错误日志的 URL 吗?

asp.net - ASP.NET Core 中的默认日志级别、系统日志级别和 Microsoft 日志级别是什么

c# - 在线程池外创建线程有什么好处?

c# - 如何在Linux环境下制作自己的夏令时表?

C# 通过属性名称动态访问属性值

azure - 什么是 LoggerExtension Args 参数以及如何与应用程序见解集成?