相关疑难解决方法(0)

如何在不使用.Result的情况下在C#中无法异步的方法中调用异步方法

我重写了一个方法HandleRequirementAsync,所以我无法修改该方法的返回类型.但是,我在UserManager中调用一个异步的方法,需要等待,所以我不得不把这个代码放在另一个方法中.

        protected override Task HandleRequirementAsync(
          AuthorizationHandlerContext context,
          EducationArmRequirement requirement)
        {

            if (!IsEducationGroup(context).Result)
            {
                return Task.FromResult(0);
            }


            context.Succeed(requirement);

            return Task.FromResult(0);
        }

        protected async Task<bool> IsEducationGroup(AuthorizationHandlerContext context)
        {
            var userId = context.User.Identity.Name;
            ApplicationUser u = await _userManager.FindByNameAsync(userId);
            if (u.Group == 3 || u.Group == 4)
            {
                return await Task.FromResult(true);
            }
            return await Task.FromResult(false);
        }
Run Code Online (Sandbox Code Playgroud)

上面的代码似乎在测试中工作,但它使用.Result解包任务以获得bool.我看过几个地方都说要小心使用结果.我看到这个问题试图解释为什么,但我没有得到它.

我不能在HandleRequirementAsync方法中等待允许它正常取消,因为那时我将不得不修改我不能为这个重写方法做的返回类型.

我是否接近使用.Result的正确方法,或者我是否会在这里遇到一些问题,如果是这样的话,另一种方法是什么呢?

任何帮助/解释将不胜感激.

c# async-await asp.net-core

4
推荐指数
1
解决办法
1874
查看次数

HttpClient GetAsync无法按预期工作

使用Postman测试我的Web API时,我的API执行正常!

HttpClient在我的客户端应用程序中运行代码时,代码执行时没有错误,但在服务器上没有预期的结果.可能会发生什么?

从我的客户应用程序:

private string GetResponseFromURI(Uri u)
{
    var response = "";
    HttpResponseMessage result;
    using (var client = new HttpClient())
    {
        Task task = Task.Run(async () =>
        {
            result = await client.GetAsync(u);
            if (result.IsSuccessStatusCode)
            {
                response = await result.Content.ReadAsStringAsync();
            }
        });
        task.Wait();
    }
    return response;
}
Run Code Online (Sandbox Code Playgroud)

这是API控制器:

[Route("api/[controller]")]
public class CartsController : Controller
{
    private readonly ICartRepository _cartRepo;

    public CartsController(ICartRepository cartRepo)
    {
        _cartRepo = cartRepo;
    }

    [HttpGet]
    public string GetTodays()
    {
        return _cartRepo.GetTodaysCarts();
    }

    [HttpGet]
    [Route("Add")]
    public string …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core-mvc uwp

2
推荐指数
2
解决办法
9831
查看次数

标签 统计

c# ×2

asp.net-core ×1

asp.net-core-mvc ×1

async-await ×1

uwp ×1