Azure関数のCosmosDbで入力バインディングを追加する方法について Microsoft learning のウォークスルーに従っていましたが、関数を呼び出すと、内部サーバーエラー(500 httpコード)が返され続けます。
Function.jsonからのAzure関数の構成は次のとおりです。
{
"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": ""
}
]
}
learn_DOCUMENTDB構成設定があり、cosmos dbインスタンスへの有効な接続文字列があります(自動的に作成されました)。
エラーログエントリは次のように述べています。
CosmosDBをタイプ 'System.String'にバインドできません。考えられる原因:1) 'Microsoft.Azure.Documents.Client.DocumentClient、Microsoft.Azure.DocumentDB.Core、Version = 2.9.2.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35'へのバインディングを試行しましたが、ユーザータイプアセンブリは 'System.Stringでした、System.Private.CoreLib、Version = 4.0.0.0、Culture = neutral、PublicKeyToken = 7cec85d7bea7798e。
私が間違っていることはありますか?
私はまだ答えの代わりにコメントを残す十分な評判がありませんが、私はこれと同じ問題があり、simandibalazsからの答えは1つのTweakでうまくいきました。新しいUIでも"id":""
のフィールドが設定に追加されているようです。IDが指定されていない場合、同じエラーが発生します。私の場合、sqlqueryのみを使用してアイテムのセットを取得したかったため、"id":""
行を削除する必要がありました。すべてのアイテムを取得する場合は、ファイルから次の両方の行を削除する必要があります。
"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("!!!!!!!!!!!!!!!!!!");
}
}
}
これはcosmos dbのアイテムです:
{
"id": "bowmanid2",
"PartitionKey": "bowmankey",
"Description": "bowmandes",
"testbowman": " "
}
(ちなみに、patitionkeyの値を設定する必要があります。私の側では、testbowmanです。)
次に、http://localhost:7071/api/todoitems/ /bowmanid2
にリクエストを送信します
私は得ることができます:
コメントするには評判が足りませんが、UIで問題が発生していました。コードとテストページのように、バインディングブレードの両方。そこで、関数アプリ自体のアプリサービスエディターに移動して、これらのファイルを変更しました。