Je suivais une procédure pas à pas de Microsoft learning sur la façon d'ajouter une liaison d'entrée avec CosmosDb pour une fonction Azure, mais lors de l'appel de la fonction, elle continue de renvoyer une erreur de serveur interne (500 code http).
La configuration de la fonction Azure de function.json est:
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "Response"
},
{
"name": "bookmark",
"direction": "in",
"type": "cosmosDB",
"databaseName": "func-io-learn-db",
"collectionName": "Bookmarks",
"connectionStringSetting": "learn_DOCUMENTDB",
"id": "{id}",
"partitionKey": "{id}",
"sqlQuery": ""
}
]
}
Il existe des paramètres de configuration learn_DOCUMENTDB dans le service d'application qui a une chaîne de connexion valide à l'instance de cosmos db (a été créée automatiquement).
L'entrée du journal des erreurs indique que:
Impossible de lier CosmosDB au type "System.String". Causes possibles: 1) Tentative de liaison à "Microsoft.Azure.Documents.Client.DocumentClient, Microsoft.Azure.DocumentDB.Core, Version = 2.9.2.0, Culture = neutre, PublicKeyToken = 31bf3856ad364e35" mais l'assembly de type d'utilisateur était "System.String , System.Private.CoreLib, Version = 4.0.0.0, Culture = neutre, PublicKeyToken = 7cec85d7bea7798e.
Y a-t-il quelque chose que je fais de mal?
Je n'ai pas encore assez de réputation pour laisser un commentaire au lieu d'une réponse, mais j'ai eu ce même problème et la réponse de simandibalazs a fonctionné pour moi avec un Tweak. Il semble que la nouvelle interface utilisateur ajoute également un champ pour "id":""
à la configuration et si vous n'avez pas d'id spécifié ici, la même erreur se produira. Dans mon cas, je voulais récupérer un ensemble d'éléments en utilisant UNIQUEMENT la requête sql, et pour ce faire, je devais toujours supprimer le "id":""
ligne. Si vous souhaitez récupérer tous les éléments, vous devez supprimer les deux lignes suivantes du fichier.
"sqlQuery": ""
"id": ""
Class1.cs:
using System;
using System.Collections.Generic;
using System.Text;
namespace FunctionApp52
{
public class Class1
{
public string Id { get; set; }
}
}
Function1.cs:
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
namespace FunctionApp52
{
public static class Function1
{
[FunctionName("DocByIdFromRouteData")]
public static IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post",
Route = "todoitems/{partitionKey}/{id}")]HttpRequest req,
[CosmosDB(
databaseName: "testbowman",
collectionName: "testbowman",
ConnectionStringSetting = "CosmosDBConnection",
Id = "{id}",
PartitionKey = "{partitionKey}")] Class1 item,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
log.LogInformation( "Id is: "+item.Id);
if (item == null)
{
log.LogInformation($"ToDo item not found");
}
else
{
log.LogInformation($"Found ToDo item");
}
return new OkObjectResult("!!!!!!!!!!!!!!!!!!");
}
}
}
Voici l'élément dans cosmos db:
{
"id": "bowmanid2",
"PartitionKey": "bowmankey",
"Description": "bowmandes",
"testbowman": " "
}
(Au fait, vous devez définir la valeur de patitionkey. De mon côté, c'est testbowman.)
Et puis j'envoie une demande à http://localhost:7071/api/todoitems/ /bowmanid2
Je peux obtenir:
Pas assez de réputation pour commenter MAIS: je rencontrais des problèmes avec l'interface utilisateur. Tant dans la lame de liaisons que dans la page code + test. Je suis donc allé à l'éditeur de service d'application sur l'application de fonction elle-même pour modifier ces fichiers.