Вход через веб-API с внешним провайдером Facebook

Я испытываю трудности с аутентификацией при выполнении внешней аутентификации с помощью Facebook на веб-API. Это мой контроллер для обработки нажатия кнопки Facebook.

[Route("facebooklogin", Name= "FacebookLogin")]
    [ValidateAntiForgeryToken()]
    public async Task<ActionResult> FacebookLogin()
    {
        string facebookLink = string.Empty;
        //Get available logins from api
        using(HttpClient client = new HttpClient() { BaseAddress = new Uri(Request.Url.GetLeftPart(UriPartial.Authority)) })
        {
            var returnUrl = Url.RouteUrl("FacebookCallback");
            var url = "/api/Account/ExternalLogins?returnUrl=" + HttpUtility.UrlEncode(returnUrl + "&generateState=true");
            var response = await client.GetAsync(url);
            response.EnsureSuccessStatusCode();
            if (response.IsSuccessStatusCode)
            {
                var loginList = await response.Content.ReadAsAsync<List<ExternalLoginViewModel>>();
                facebookLink = loginList.Where(x => x.Name == "Facebook").Select(x => x.Url).FirstOrDefault();
                //Send a get request to the facebook url
                var facebookUrlResponse = await client.GetAsync(facebookLink);
                facebookUrlResponse.EnsureSuccessStatusCode();
            }
            else { }
        }
        return View();
    }

    [Route("facebookcallback", Name="FacebookCallback")]
    public ActionResult FacebookLoginCallback()
    {
        //Parse the access_token from facebook from the url


        return View();
    }

Когда бы я ни отлаживал var facebookUrlResponse = await client.GetAsync(facebookLink); Я понимаю, у меня плохой запрос. Мой код получает всех доступных внешних провайдеров входа в систему, а затем пытается использовать URL-адрес, созданный для Facebook, для достижения конечной точки /api/Account/ExternalLogin в контроллере учетной записи. Я не могу достичь этой конечной точки.

Я получаю это сообщение об ошибке:

Код статуса ответа не указывает на успех: 400 (неверный запрос).

Я планирую, чтобы URI перенаправления пришел на маршрут FacebookCallback. Затем я могу разобрать access_token из URI и сделать дальнейшее шествие. Может кто-нибудь помочь мне?

Я мог бы получить эту информацию от почтальона:

Произошло необработанное исключение во время выполнения текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде. Сведения об исключении: System.Net.Http.HttpRequestException: код состояния ответа не указывает на успешность: 400 (неверный запрос).

Ошибка источника:

// Отправить запрос на получение в строке URL-адреса facebook 135: var facebookUrlResponse = await client.GetAsync(facebookLink);

Это также трассировка стека:

[HttpRequestException: код состояния ответа не указывает на успешность: 400 (неверный запрос).] System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode () +92180 Blinkas.Web.Controllers. d__6.MoveNext () в C:\Users\Williams\Documents\Visual Studio 2015\Projects\Blinkas\Blinkas.Web\Controllers\HomeController.cs:136 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(задача задачи) +92 System.Runtime.CompilerServices.TasckAwaiter.HugleND задача) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult() +26 System.Threading.Tasks.TaskHelpersExtensions.ThrowIfFapted (задача Task) +42 System.Web.Mvc.Async.TaskAsyncActionDescriptor.EsyncRult ()..Web.Mvc.Async.<> C__DisplayClass37. b__36 (IAsyncResult asyncResult) +37 System.Web.Mvc.Async.WrappedAsyncResult 1.CallEndDelegate(IAsyncResult asyncResult) +27 System.Web.Mvc.Async.WrappedAsyncResultBase 1.End() +58 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, тег объекта) +68 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult.34. System.34). Async.AsyncInvocationWithFilters. b__3d () +69 System.Web.Mvc.Async.<> c__DisplayClass46. b__3f () +230 System.Web.Mvc.Async.<> c__DisplayClass33. b__32 (IAsyncResult asyncResult) +27 System.Web.Mvc.Async.WrappedAsyncResult 1.CallEndDelegate(IAsyncResult asyncResult) +27 System.Web.Mvc.Async.WrappedAsyncResultBase 1.End() +58 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, тег объекта) +68 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult. Async. <> C__DisplayClass2b. b__1c () +42 System.Web.Mvc.Async.<> C__DisplayClass21. b__1e (IAsyncResult asyncResult) +124 System.Web.Wrac. 1.CallEndDelegate(IAsyncResult asyncResult) +27 System.Web.Mvc.Async.WrappedAsyncResultBase 1.End() +58 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, тег объекта) +30 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncves. +29). Контроллер. b__1d (IAsyncResult asyncResult, ExecuteCoreState innerState) +27 System.Web.Mvc.Async.WrappedAsyncVoid 1.CallEndDelegate(IAsyncResult asyncResult) +48 System.Web.Mvc.Async.WrappedAsyncResultBase 1.End() +58 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, тег объекта) +30 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, тег объекта) +21 System.Web.Mvc.Controller.EndExecuteCore (IAsyncResult asyncResult) +32 System.Web.Mvc.Controller. b__15 (IAsyncResult asyncResult, контроллер) +26 System.Web.Mvc.Async.WrappedAsyncoid 1.CallEndDelegate(IAsyncResult asyncResult) +40 System.Web.Mvc.Async.WrappedAsyncResultBase1.End() +58 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, тег объекта) +30 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, тег объекта) +21 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +29 System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +24 System.Web. IAsyncResult asyncResult, ProcessRequestState innerState) +27 System.Web.Mvc.Async.WrappedAsyncVoid 1.CallEndDelegate(IAsyncResult asyncResult) +48 System.Web.Mvc.Async.WrappedAsyncResultBase 1.End() +58 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, тег объекта) +30 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, тег объекта) +21 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +29 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult результат) +23 System.Web.ntionSynClanHell

0 ответов

Другие вопросы по тегам