![](/img/trans.png)
[英]HttpresponseMessage risposta = await client.PostAsync(new Uri(uri), queryString); ends execution prematurely
[英]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.