2017-05-20 110 views
0

我试图在asp.net核心1.1上使用angurl 2/4 cli实现防伪令牌,但每次使用“ValidateAntiForgeryToken”系统时都会给我400个错误的请求错误。asp.net核心1.1 antiforgery角2/4

在asp.net startup.cs我有使用

services.AddAntiforgery(options => options.HeaderName = "X-XSRF-TOKEN"); 



app.Use(async (context, next) =>{ 
await next(); 
string path = context.Request.Path.Value; 
if (path != null && !path.ToLower().Contains("/api")) 
{ 
     var tokens = antiforgery.GetAndStoreTokens(context); 
     context.Response.Cookies.Append("XSRF-TOKEN", 
     tokens.RequestToken, new CookieOptions{HttpOnly = false}); 
} 

if (context.Response.StatusCode == 404 && 
    !Path.HasExtension(context.Request.Path.Value)) 
{ 
    context.Request.Path = "/index.html"; 
    context.Response.StatusCode = 200; 
    await next(); 
} 

});

在角app.module.ts

我使用类似

provider:[{ provide: XSRFStrategy, useFactory: xsrfFactory}], 

export function xsrfFactory() { 
    return new CookieXSRFStrategy('*******', '********'); 
} 

回答

0

本指南有帮助吗? http://www.dotnetcurry.com/aspnet/1343/aspnet-core-csrf-antiforgery-token

public class AngularAntiforgeryCookieResultFilter: ResultFilterAttribute 
{ 
    private IAntiforgery antiforgery; 
    public AngularAntiforgeryCookieResultFilter(IAntiforgery antiforgery) 
    { 
     this.antiforgery = antiforgery; 
    } 

    public override void OnResultExecuting(ResultExecutingContext context) 
    { 
     if (context.Result is ViewResult) 
     { 
      var tokens = antiforgery.GetAndStoreTokens(context.HttpContext); 
      context.HttpContext.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken, new CookieOptions() { HttpOnly = false }); 
     } 
    } 
} 

services.AddAntiforgery(opts => opts.HeaderName = "X-XSRF-Token"); 
services.AddMvc(opts => 
{ 
    opts.Filters.AddService(typeof(AngularAntiforgeryCookieResultFilter)); 
}); 
services.AddTransient<AngularAntiforgeryCookieResultFilter>(); 
+0

我都试过,但我想,我已经尝试设置头“X-XSRF令牌”,仍然的WebAPI给我400错误我的角部位配置不正确。 – Megh

+0

你可以尝试使用jQuery进行测试请求吗?确保服务器端正常工作。 – wannadream

+0

我很抱歉,我试图通过jquery提出请求,但仍然出现同样的错误,好像我没有正确配置它。 – Megh