Skip to content

Commit bf3bfd1

Browse files
committed
Fix Antiforgery support (#326)
1 parent d1b2edb commit bf3bfd1

File tree

3 files changed

+40
-16
lines changed

3 files changed

+40
-16
lines changed

src/MyTested.AspNetCore.Mvc.Abstractions/Internal/WebFramework.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,26 @@ public static Type LambdaExpressionComparer
188188
return type;
189189
}
190190
}
191+
192+
public static Type IAntiforgeryFeature
193+
{
194+
get
195+
{
196+
var assembly = Assembly.Load(new AssemblyName("Microsoft.AspNetCore.Antiforgery"));
197+
var type = assembly.GetType("Microsoft.AspNetCore.Antiforgery.IAntiforgeryFeature");
198+
return type;
199+
}
200+
}
201+
202+
public static Type AntiforgeryFeature
203+
{
204+
get
205+
{
206+
var assembly = Assembly.Load(new AssemblyName("Microsoft.AspNetCore.Antiforgery"));
207+
var type = assembly.GetType("Microsoft.AspNetCore.Antiforgery.AntiforgeryFeature");
208+
return type;
209+
}
210+
}
191211
}
192212

193213
// Copied from the ASP.NET Core source code.

src/MyTested.AspNetCore.Mvc.Controllers/Internal/Controllers/ControllerPropertyHelper.cs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,11 @@ public Func<object, ActionContext> ActionContextGetter
4444
}
4545

4646
public static ControllerPropertyHelper GetProperties<TController>()
47-
where TController : class
48-
{
49-
return GetProperties(typeof(TController));
50-
}
47+
where TController : class
48+
=> GetProperties(typeof(TController));
5149

52-
public static ControllerPropertyHelper GetProperties(Type type)
53-
{
54-
return ControllerPropertiesCache.GetOrAdd(type, _ => new ControllerPropertyHelper(type));
55-
}
50+
public static ControllerPropertyHelper GetProperties(Type type)
51+
=> ControllerPropertiesCache.GetOrAdd(type, _ => new ControllerPropertyHelper(type));
5652

5753
private void TryCreateControllerContextDelegates()
5854
{

src/MyTested.AspNetCore.Mvc.ViewFeatures/HttpRequestBuilderViewFeaturesExtensions.cs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
namespace MyTested.AspNetCore.Mvc
22
{
3+
using System;
34
using Builders.Contracts.Http;
45
using Builders.Http;
6+
using Internal;
57
using Microsoft.AspNetCore.Antiforgery;
68
using Microsoft.Extensions.DependencyInjection;
79
using Microsoft.Extensions.Options;
10+
using Utilities.Extensions;
811

912
/// <summary>
1013
/// Contains <see cref="IAntiforgery"/> extension methods for <see cref="IHttpRequestBuilder"/>.
@@ -41,15 +44,20 @@ public static IAndHttpRequestBuilder WithAntiForgeryToken(this IHttpRequestBuild
4144
actualHttpRequestBuilder.WithFormField(antiForgeryOptions.FormFieldName, tokens.RequestToken);
4245
}
4346

44-
//var generatedAntiforgeryFeature = httpContext.Features.Get<IAntiforgeryFeature>();
47+
var antiforgeryFeature = WebFramework.Internals.IAntiforgeryFeature;
4548

46-
//httpContext.Features.Set<IAntiforgeryFeature>(new AntiforgeryFeature
47-
//{
48-
// HaveDeserializedCookieToken = false,
49-
// HaveDeserializedRequestToken = false,
50-
// CookieToken = generatedAntiforgeryFeature.NewCookieToken,
51-
// RequestToken = generatedAntiforgeryFeature.NewRequestToken
52-
//});
49+
var generatedAntiforgeryFeature = httpContext.Features[antiforgeryFeature].Exposed();
50+
51+
var newAntiforgeryFeature = Activator
52+
.CreateInstance(WebFramework.Internals.AntiforgeryFeature)
53+
.Exposed();
54+
55+
newAntiforgeryFeature.HaveDeserializedCookieToken = false;
56+
newAntiforgeryFeature.HaveDeserializedRequestToken = false;
57+
newAntiforgeryFeature.CookieToken = generatedAntiforgeryFeature.NewCookieToken;
58+
newAntiforgeryFeature.RequestToken = generatedAntiforgeryFeature.NewRequestToken;
59+
60+
httpContext.Features[antiforgeryFeature] = newAntiforgeryFeature.Object;
5361

5462
return actualHttpRequestBuilder;
5563
}

0 commit comments

Comments
 (0)