Skip to content

Commit fe47df6

Browse files
committed
Convert HttpWebRequest to use UnsafeAccessorType
1 parent 77ba50d commit fe47df6

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

src/libraries/System.Net.Requests/src/System/Net/HttpWebRequest.cs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1693,11 +1693,16 @@ private static HttpClient CreateHttpClient(HttpClientParameters parameters, Http
16931693
{
16941694
// This is legacy feature and we don't have public API at the moment.
16951695
// So we want to process it only if explicitly set.
1696-
var settings = typeof(SocketsHttpHandler).GetField("_settings", BindingFlags.NonPublic | BindingFlags.Instance)?.GetValue(handler);
1697-
Debug.Assert(settings != null);
1698-
FieldInfo? fi = Type.GetType("System.Net.Http.HttpConnectionSettings, System.Net.Http")?.GetField("_impersonationLevel", BindingFlags.NonPublic | BindingFlags.Instance);
1699-
Debug.Assert(fi != null);
1700-
fi.SetValue(settings, request.ImpersonationLevel);
1696+
GetImpersonationLevel(GetSettings(handler)) = request.ImpersonationLevel;
1697+
1698+
const string HttpConnectionSettingsTypeName = "System.Net.Http.HttpConnectionSettings, System.Net.Http";
1699+
1700+
[UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_settings")]
1701+
[return: UnsafeAccessorType(HttpConnectionSettingsTypeName)]
1702+
static extern object GetSettings(SocketsHttpHandler handler);
1703+
1704+
[UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_impersonationLevel")]
1705+
static extern ref TokenImpersonationLevel GetImpersonationLevel([UnsafeAccessorType(HttpConnectionSettingsTypeName)] object settings);
17011706
}
17021707

17031708
if (parameters.CookieContainer != null)

0 commit comments

Comments
 (0)