簡體   English   中英

在Web API異常中通過HttpClient登錄等待客戶端。

[英]Login via HttpClient in Web API Exception await client.PostAsync

我創建了一個ASP.net項目WebAPI和一個MVC項目。 當我嘗試通過帶有mvc項目的HttpClient登錄到Web api時,將引發異常。

MVC代碼,

登錄AccountController:

  public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }
        try
        {
            var client = WebApiHttpClient.GetClient();
            string username = model.Email;
            string password = model.Password;
            HttpContent content = new StringContent("grant_type=password&username=" + username + "&password=" + password,System.Text.Encoding.UTF8,
            "application/x-www-form-urlencoded");
            var response = await client.PostAsync("/Token", content);
            if (response.IsSuccessStatusCode)
            {
                //string contentResponse = await response.Content.ReadAsStringAsync();
                //return Content(contentResponse);
                TokenResponse tokenResponse =
                await response.Content.ReadAsAsync<TokenResponse>();
                WebApiHttpClient.storeToken(tokenResponse);
                // return Content(tokenResponse.AccessToken);
                return RedirectToAction("Index", "Home");

            }
            else
            {
                return Content("Error in: " + response.StatusCode);
            }
        }
        catch
        {
            return Content("Error catch .");
        }
    }

WebapiHtppClient類:用於連接到API

  public class WebApiHttpClient
{
    public const string WebApiBaseAddress = "https://localhost:44379/";
    public static HttpClient GetClient()
    {
        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri(WebApiBaseAddress);
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new
        MediaTypeWithQualityHeaderValue("application/json"));
        var session = HttpContext.Current.Session;
        if (session["token"] != null)
        {
            TokenResponse tokenResponse = getToken();
            client.DefaultRequestHeaders.Authorization =
            new AuthenticationHeaderValue("bearer", tokenResponse.AccessToken);
        }

        return client;
    }

    public static void storeToken(TokenResponse token)
    {
        var session = HttpContext.Current.Session;
        session["token"] = token;
    }
    public static TokenResponse getToken()
    {
        var session = HttpContext.Current.Session;
        return (TokenResponse)session["token"];
    }

}

public class TokenResponse
{
    [JsonProperty("access_token")]
    public string AccessToken { get; set; }
    [JsonProperty("token_type")]
    public string TokenType { get; set; }
    [JsonProperty("expires_in")]
    public int ExpiresIn { get; set; }
    [JsonProperty("userName")]
    public string Username { get; set; }
    [JsonProperty(".issued")]
    public string IssuedAt { get; set; }
    [JsonProperty(".expires")]
    public string ExpiresAt { get; set; }
} 

我已經從這里嘗試了很多答案,但沒有找到結果。 一個在await client.PostAsync(“ / Token”,content)中,只需放入“ Token”

使用chrome的郵遞員,我可以登錄並以此查看Web Api中的內容

郵差

錯誤捕獲:發送請求時發生錯誤。 WebApplication1.Controllers.Controller.System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()處的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務任務)處的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務任務)的mscorlib C:\\ wamp \\ www \\ arqsi \\ it1 \\ iteracao3 \\ iteracao3 \\ WebApplication1 \\ Controllers \\ AccountController.cs中的d__11.MoveNext():行88

我建議你放一個調試器
(在AccountController中=> if(response.IsSuccessStatusCode))
此時檢查
1)如果您能夠使用API​​,
2)如果令牌在您的響應變量中返回

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM