My ASP. NET В основном приложении используется внешняя аутентификация входа в систему "из коробки". Что я хочу реализовать - при вызове на Facebook я хочу обернуть URL перенаправления и вернуть его как json для использования в jquery интерфейсе. Но после завершения запроса я вижу ошибку 500 в браузере и следующую ошибку в консоли приложения:
ошибка: Microsoft.AspNetCore.Server.Kestrel [13] идентификатор соединения "0HLV651D6KVJ C", идентификатор запроса " 0HLV651D6KVJ C: 00000005 ": приложение выдало необработанное исключение. System.InvalidOperationException: Несоответствие длины содержимого ответа: слишком мало записано байтов (0 из 470).
Мое внешнее действие при входе в систему, ничего особенного для проверки
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public IActionResult ExternalLogin(string provider, string returnUrl = null)
{
// Request a redirect to the external login provider.
var redirectUrl = Url.Action(nameof(ExternalLoginCallback), "Account", new { returnUrl });
var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
return Challenge(properties, provider);
}
аутентификация Facebook конфигурация:
services.AddAuthentication().AddFacebook(facebookOptions =>
{
facebookOptions.AppId = Configuration["Authentication:Facebook:AppId"];
facebookOptions.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
facebookOptions.Events.OnRedirectToAuthorizationEndpoint =
async (x) =>
{
UTF8Encoding encoding = new UTF8Encoding();
var content = JsonConvert.SerializeObject(new { redirect_url = x.RedirectUri });
byte[] bytes = encoding.GetBytes(content);
x.Response.StatusCode = 200;
x.Response.ContentLength = bytes.Length;
x.Response.ContentType = "text/plain";
x.Response.Body = new MemoryStream();
await x.Response.WriteAsync(content);
// at this point I see that x.Response.Body.Length == 470, but message states there are 0 of 470 written
};
});
Есть ли способ заставить его работать?