, поэтому необходимо две вещи:
- во время страницы GET: получить cookie из заголовков и извлечь __RequestVerification
- при отправке формы: добавить cookie вЗаголовки и добавьте __RequestVerification к модели
1. GET
Вы можете извлечь токен с помощью:
headers.FirstOrDefault(x => x.Key == "Set-Cookie").Value.First().Split(" ")[0];
// The cookie we are looking for is .AspNetCore.Antiforgery.<unique guid>=<unique guid>
var tokenCookie = cookieContent.Split("=");
var name = tokenCookie[0];
var value = tokenCookie[1];
Вы можете извлечь __RequestVerification с помощью пакета Nuget HtmlAgilityPack , а затем выполнить:
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(htmlContent);
var tokenValue = htmlDoc.DocumentNode.SelectSingleNode("//input[@name='__RequestVerificationToken']")
.Attributes.Where(x => x.Name == "value").Select(x => x.Value).First();
где htmlContent
равно HttpResponse.Content.ReadAsStringAsync();
2. POST
Когда вы создаете форму, добавьте __RequestVerificationToken:
new FormUrlEncodedContent(new List<KeyValuePair<string, string>>
{
... your stuff here
new KeyValuePair<string, string>("__RequestVerificationToken", token)
});
}
, а затем при отправке запроса:
var request = new HttpRequestMessage(HttpMethod.Post, endPoint)
{ Content = form };
request.Headers.Add("Cookie", $"{cookie.Name}={cookie.Value}");
await client.SendAsync(request);
, где client
- HttpClient
созданиспользуя TestServer.CreateClient
.
Надеюсь, это поможет кому-то еще!