C sharp - Ayuda convertir Program a Controller con await

 
Vista:

Ayuda convertir Program a Controller con await

Publicado por JuniorProgrammer (1 intervención) el 13/03/2022 12:58:50
Hola, necesito alguna pista o ayuda, tengo un código que funciona correctamente como programa pero que al meterlo dentro de un controller no me funciona. Seguramente es algo básico pero desconozco por completo.

Esto funciona perfectamente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
static async Task Main(string[] args)
		{
            var result = await searchReviewsByIdProductAsync("hhcbaaczbzj");
			System.Environment.Exit(1);
		}
 
private static async Task<string> searchReviewsByIdProductAsync(string idProduct)
        {
			var result = "";
			Console.WriteLine("searchReviewByIdProduct:" + idProduct);
 
			//define connections
			var conn1Config = new Dictionary<string, object>();
 
			//config connection 1
			conn1Config.Add("baseUrl", "https://test.ipdb.io");
			BlockchainConnection conn1 = new BlockchainConnection(conn1Config);
 
			//add connections
			IList<BlockchainConnection> connections = new List<BlockchainConnection>();
			connections.Add(conn1);
 
			//multiple connections
			var builderWithConnections = BigchainDbConfigBuilder
				.addConnections(connections)
				.setTimeout(20000); //override default timeout of 20000 milliseconds
 
			// single connection
			var builder = BigchainDbConfigBuilder
				.baseUrl("https://test.ipdb.io");
 
			if (!AsyncContext.Run(() => builder.setup()))
			{
				Console.WriteLine("Failed to setup");
			};
 
			// prepare your key
			var algorithm = SignatureAlgorithm.Ed25519;
			var privateKey = Key.Import(algorithm, Utils.StringToByteArray(privateKeyString), KeyBlobFormat.PkixPrivateKey);
			var publicKey = PublicKey.Import(algorithm, Utils.StringToByteArray(publicKeyString), KeyBlobFormat.PkixPublicKey);
			var assets = await AssetsApi<object>.getAssetsAsync(idProduct);
 
            try
            {
				for (int i = 0; i < assets.Count; i++)
				{
 
					JsonSerializer serializer = new JsonSerializer();
					//ReviewsAsset review = (ReviewsAsset)serializer.Deserialize((Newtonsoft.Json.Linq.JObject)assets[i].Data, typeof(ReviewsAsset));
					var json = assets[i].Data.ToString().Substring(0, assets[i].Data.ToString().Length);
 
					string jsonCliente = JsonConvert.SerializeObject(assets[i].Data);
 
					//var dictionary = serializer.Deserialize<Dictionary<string, object>>(assets[i].Data);
 
					result += assets[i].Data.ToString() + "@|@";
				}
			}
            catch (Exception e)
            {
				Console.WriteLine("Error: " + e.Message);
            }
 
			return result;
		}

pero si lo pongo en un Controller tal que así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
[System.Web.Http.HttpGet]
        public async Task<string> searchReviewsByIdProductAsync(string id)
        {
            var result = "";
 
            try
            {
                //define connections
                var conn1Config = new Dictionary<string, object>();
 
                //config connection 1
                conn1Config.Add("baseUrl", "https://test.ipdb.io");
                BlockchainConnection conn1 = new BlockchainConnection(conn1Config);
 
                //add connections
                IList<BlockchainConnection> connections = new List<BlockchainConnection>();
                connections.Add(conn1);
 
                //multiple connections
                var builderWithConnections = BigchainDbConfigBuilder
                    .addConnections(connections)
                    .setTimeout(20000); //override default timeout of 20000 milliseconds
 
                var builder = BigchainDbConfigBuilder
                                .baseUrl("https://test.ipdb.io")
                                .webSocketMonitor(new ValidTransactionMessageHandler())
             .setup();
 
                //if (!AsyncContext.Run(() => builder.setup()))
                //{
                //    Console.WriteLine("Failed to setup");
                //};
 
                // prepare your key
                var algorithm = SignatureAlgorithm.Ed25519;
                var privateKey = Key.Import(algorithm, Utils.StringToByteArray(privateKeyString), KeyBlobFormat.PkixPrivateKey);
                var publicKey = PublicKey.Import(algorithm, Utils.StringToByteArray(publicKeyString), KeyBlobFormat.PkixPublicKey);
                var assets = await AssetsApi<object>.getAssetsAsync(id);
 
                if (assets != null)
                {
                    if (assets.Count > 0)
                    {
                        for (int i = 0; i < assets.Count; i++)
                        {
 
                            JsonSerializer serializer = new JsonSerializer();
                            //ReviewsAsset review = (ReviewsAsset)serializer.Deserialize((Newtonsoft.Json.Linq.JObject)assets[i].Data, typeof(ReviewsAsset));
                            var json = assets[i].Data.ToString().Substring(0, assets[i].Data.ToString().Length);
 
                            string jsonCliente = JsonConvert.SerializeObject(assets[i].Data);
 
                            //var dictionary = serializer.Deserialize<Dictionary<string, object>>(assets[i].Data);
 
                            result += assets[i].Data.ToString() + "@|@";
                        }
                    }
                    else
                    {
                        result = "No Assets";
                    }
                }
                else
                {
                    result = "No Assets";
                }
 
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: " + e.Message);
                result = e.Message;
            }
 
            //sw.Stop();
 
            return result;
 
        }

Esto ya no me funciona, concretamente falla en:

1
var assets = await AssetsApi<object>.getAssetsAsync(id);

En esta línea no la resuelve y salta por timeout devolviendo un null.

Agradezco cualquier pista o manual que leer. Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder