1
resposta

não é possível converter de

Estou com o seguinte erro

Gravidade Código Descrição Projeto Arquivo Linha Estado de Supressão Erro CS1503 Argumento 1: não é possível converter de "System.Threading.Tasks.Task" para "string" UsuariosApi D:\Cursos\ALURA\ASP.NET Core REST APIs\Sistemas\NET 5 e Identity implementando controle de usuário\FilmeAPI\UsuariosApi\Services\CadastroService.cs 31 Ativo

Segue código do CadastroService.cs
    using AutoMapper;
using FluentResults;
using Microsoft.AspNetCore.Identity;
using System;
using System.Threading.Tasks;
using UsuariosAPI.Data.Dtos;
using UsuariosAPI.Models;

namespace UsuariosApi.Services
{
    public class CadastroService
    {
        private IMapper _mapper;
        private UserManager<IdentityUser<int>> _userManager;

        public CadastroService(IMapper mapper, UserManager<IdentityUser<int>> userManager)
        {
            _mapper = mapper;
            _userManager = userManager;
        }

        public Result CadastraUsuario(CreateUsuarioDto createDto)
        {
            Usuario usuario = _mapper.Map<Usuario>(createDto);
            IdentityUser<int> usuarioIdentity = _mapper.Map<IdentityUser<int>>(usuario);
            Task<IdentityResult> resultadoIdentity = _userManager
                .CreateAsync(usuarioIdentity, createDto.Password);
            if (resultadoIdentity.Result.Succeeded) 
            {
                var code = _userManager.GenerateEmailConfirmationTokenAsync(usuarioIdentity);
                return Result.Ok().WithSuccess(code);
            }

            return Result.Fail("Falha ao cadastrar usuário!!");

        }
    }
}
1 resposta

Acredito que o problema esteja nessa linha, certo?

return Result.Ok().WithSuccess(code);

O método GenerateEmailConfirmationTokenAsync retorna uma Task< string > enquanto provavelmente o seu método WithSuccess espera um parâmetro string.

Seguindo o padrão do seu código, a modificação mais simples seria trocar essa linha:

var code = _userManager.GenerateEmailConfirmationTokenAsync(usuarioIdentity);

Por essa:

var code = _userManager.GenerateEmailConfirmationTokenAsync(usuarioIdentity).Result;

Mas eu recomendo fortemente que você modifique seu método para retornar uma Task< Result > ao invés de simplesmente um Result e começar a usar o operador "await". Isso evitaria bloqueio da thread que realiza a chamada.

Por exemplo:

var code = await _userManager.GenerateEmailConfirmationTokenAsync(usuarioIdentity);

Para isso, a assinatura do seu método passaria a ser:

public async Task CadastraUsuario(CreateUsuarioDto createDto)