当前位置: 首页 > 知识库问答 >
问题:

在Web API异常等待客户端中通过HttpClient登录。邮政同步

劳研
2023-03-14

我已经创建了一个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; }
} 

我在这里已经试过很多次了,但是没有找到结果。一个在等待客户。PostAsync(“/Token”,content),只需放置“Token”

有了chrome的邮递员,我就可以登录并在Web Api中看到这些东西了

邮递员

错误捕获:发送请求时出错。mscorlibat系统。运行时。编译器服务。任务等待者。系统中的ThrowForNonSuccess(任务任务)。运行时。编译器服务。任务等待者。系统上的HandleNonSuccessAndDebuggerNotification(任务)。运行时。编译器服务。任务等待者'1。WebApplication1上的GetResult()。控制器。会计控制员。迪乌11。C:\wamp\www\arqsi\it1\iteracao3\iteracao3\WebApplication1\Controllers\AccountController中的MoveNext()。政务司司长:第88行

共有1个答案

巩阳秋
2023-03-14

我建议你把一个调试器
(在会计控制器=

 类似资料:
  • 我看到了一个奇怪的问题。NET client for MongoDB抛出了一个

  • 我有一些文件要上传,有些文件失败了,因为帖子是异步的,而不是同步的。 我正在尝试将此调用作为同步调用。 我想等回应。 如何将此调用设为同步调用? 任何帮助感谢!

  • 然后我有了调用webAPI的dataLayer,它看起来像这样。为了简单起见,我直接使用。result。 我的问题是,我看到一些教程说我们应该避免使用。result,因为它可能会导致死锁。我不确定在我的情况下是否需要使用Async/await?如果我确实需要,我知道我应该一直异步,但我确实希望我的controlLayer是同步的,因为我有其他层调用controlLayer的函数,我不希望所有层的函

  • 我已经创建了一个简单的Jersey客户端,它能够成功地使用有效负载执行POST请求。但现在它正在等待来自httpendpoint的响应: 问:代码是否有可能不等待响应。 我试图阅读泽西客户端文档,以确定我的代码是否有可能不等待响应?我看到我们只能在读取响应后关闭连接,但在我的情况下没有用。我想在将有效负载发布到endpoint后立即关闭连接。 我只需要触发并忘记POST请求,因为我不关心响应。这是

  •  说明 调用方法: $.f2e.util.yy.isInstallYY(fn); 函数说明: UDB登陆 参数说明: 参数名 类型 说明 备注 fn function 回调函数 null为未登录YY客户端 无 脚本 <script> $.f2e.util.yy.isInstallYY(function(data){ if(data){ //有登录

  • 我有一个从服务器端抛出的异常,我希望在客户端捕捉到这个异常。异常应该使用Jersey通过REST发送。这是我目前所掌握的: 定义我的异常: