HttpClient的IsComplete总是返回false [英] HttpClient IsComplete always return false

查看:123
本文介绍了HttpClient的IsComplete总是返回false的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想授权用户通过使用的HttpClient GetAsync方法从远程XML Web服务的数据。不幸的是,无论服务器的答案result.IsCompleted alaways在控制器返回false。我做错了吗?

这是控制器:

  [HttpPost]
        [使用AllowAnonymous]
        [ValidateAntiForgeryToken]
        公众的ActionResult登录(CredentialsViewModel模型)
        {
            如果(!ModelState.IsValid)返回视图(登录);
            VAR的结果= ar.AuthenticateUser(model.UserName,model.Password);
            如果(!result.IsCompleted)
            {
                ModelState.AddModelError(CustomError,Входвсистемусуказаннымилогиномипаролемневозможен);
                返回视图(登录);
            }
            FormsAuthentication.SetAuthCookie(model.UserName,FALSE);
            返回RedirectToAction(指数,家);
        }

这是资料库,如果授权成功,实际上必须返回boolean值。

 公共异步任务<布尔>的authenticateUser(字符串登录,串密码)
        {
            常量字符串URL = @http://somehost.ru:5555/api/getcountries
            VAR的客户=新的HttpClient();
            变种EN codeD = Convert.ToBase64String(Encoding.ASCII.GetBytes(的String.Format({0}:{1},登录密码)));
            client.DefaultRequestHeaders.Authorization =新AuthenticationHeaderValue(基本,恩codeD);
            VAR的结果=等待client.GetAsync(URL);
            如果(result.IsSuccessStatus code)返回true;
            返回false;
        }


解决方案

您的控制器操作需要返回任务,因为所有的异步方法需要被用链子拴住了。

海龟一路下滑 帮助我记得:)

  [HttpPost]
[使用AllowAnonymous]
[ValidateAntiForgeryToken]
公共异步任务<&的ActionResult GT;登录(CredentialsViewModel模型)
{
    如果(!ModelState.IsValid)返回视图(登录);
    VAR的结果=等待ar.AuthenticateUser(model.UserName,model.Password);
    如果(!result.IsCompleted)
    {
        ModelState.AddModelError(CustomError,Входвсистемусуказаннымилогиномипаролемневозможен);
        返回视图(登录);
    }
    FormsAuthentication.SetAuthCookie(model.UserName,FALSE);
    返回RedirectToAction(指数,家);
}

I'm trying to authorize user for get data from remote xml web service by using HttpClient GetAsync method. Unfortunately regardless server answer result.IsCompleted alaways return false in Controller. What I'm doing wrong?
This is Controller:

[HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public ActionResult Login(CredentialsViewModel model)
        {
            if (!ModelState.IsValid) return View("Login");
            var result = ar.AuthenticateUser(model.UserName, model.Password);
            if (!result.IsCompleted)
            {
                ModelState.AddModelError("CustomError", "Вход в систему с указанными логином и паролем невозможен");
                return View("Login");
            }
            FormsAuthentication.SetAuthCookie(model.UserName, false);
            return RedirectToAction("Index", "Home");
        }

And this is repository that actually must return boolean value if authorize was successful.

public async Task<bool> AuthenticateUser(string login, string password)
        {
            const string url = @"http://somehost.ru:5555/api/getcountries";
            var client = new HttpClient();
            var encoded = Convert.ToBase64String(Encoding.ASCII.GetBytes(String.Format("{0}:{1}", login, password)));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", encoded);
            var result = await client.GetAsync(url);
            if (result.IsSuccessStatusCode) return true;
            return false;
        }

解决方案

Your controller action needs to return a Task as all async methods need to be chained down.

Turtles all the way down helps me remember :)

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(CredentialsViewModel model)
{
    if (!ModelState.IsValid) return View("Login");
    var result = await ar.AuthenticateUser(model.UserName, model.Password);
    if (!result.IsCompleted)
    {
        ModelState.AddModelError("CustomError", "Вход в систему с указанными логином и паролем невозможен");
        return View("Login");
    }
    FormsAuthentication.SetAuthCookie(model.UserName, false);
    return RedirectToAction("Index", "Home");
}

这篇关于HttpClient的IsComplete总是返回false的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆