私は、HTTPリクエストを受け取り、HTTPリクエストを返すAzure関数を作成しました。関数:Azure関数 - ファイルを含むテンプレートをルート
- がn分で期限切れに共有アクセス署名付きブロブストレージ内の位置へ
- はURIを作成し、HTTP要求を受け入れ/時間
- ロケーション・ヘッダセットで302個のステータスコードを返しn分/時間で有効期限が切れるURIへ
クエリパラメータにBLOBのパスを配置したときにこれを動作させることはできましたが、その変数がルートテンプレートに含まれていると失敗します。
私はルートテンプレート:storage/{containerName:alpha}/{path:alpha}を作成しようとしましたが、常に404を返します。以下はリクエストの作成方法の例です。
GET /api/storage/example-container-name/example.jpg?code=SSBhbSBhIHRlYXBvdCwgZG8geW91IHRoaW5rIEkgd291bGQgcHV0IGEgcGFzc3dvcmQgaGVyZT8= HTTP/1.1
Host: hostdoesnotexist.azurewebsites.net
Cache-Control: no-cache
は**注意:ホストが本物ではない、パスとコードが本物ではありません*
私はプロキシが同じことをやっAzureの機能に関連していた、この質問が、この質問を見つけました。関数には適用されません。
Azure Functions Proxy - route to storage account
このAzure Functions HTTP and webhook bindings例を使用して、HTTPエンドポイント部カスタマイズまでスクロール、私は次のコードで別の機能を作成した:
Function.json - idがINTから変更?ルートは、製品/テスト/ ABCDであれば、それはで応答
{
"bindings": [
{
"name": "req",
"type": "httpTrigger",
"direction": "in",
"methods": [
"get"
],
"route": "products/{category:alpha}/{id:alpha}",
"authLevel": "function"
},
{
"name": "$return",
"type": "http",
"direction": "out"
}
],
"disabled": false
}
run.csx
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req,
string category,
string id,
TraceWriter log)
{
if (id == null)
return req.CreateResponse(HttpStatusCode.OK, $"All {category} items were requested.");
else
return req.CreateResponse(HttpStatusCode.OK, $"{category} item with id = {id} has been requested.");
}
アルファに:
200 - 「idのテスト項目= ABCが要求されました"
しかし、あなたが製品/テスト/ abcd.jpgにこれを変更した場合、それはで応答:
404 - あなたが探しているリソースは削除されましたが、その名前が変更された、または現在利用でき。
これは私が作成した他の関数で見ているのと同じ動作です。
これはプロキシの例のようなバグか、私のルートが違って見えるかどうかは知りませんか?この場合も、クエリパラメータを使用して作業していますが、変数をルートテンプレートに移動すると失敗します。
編集 - フィードバック function.json
{
"bindings": [
{
"name": "req",
"type": "httpTrigger",
"direction": "in",
"methods": [
"get"
],
"route": "products/{category:alpha}",
"authLevel": "function"
},
{
"name": "$return",
"type": "http",
"direction": "out"
}
],
"disabled": false
}
run.csx
using System.Net;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req,
string category,
TraceWriter log)
{
string id = req.GetQueryNameValuePairs()
.FirstOrDefault(q => string.Compare(q.Key, "id", true) == 0)
.Value;
if (id == null)
return req.CreateResponse(HttpStatusCode.OK, $"All {category} items were requested.");
else
return req.CreateResponse(HttpStatusCode.OK, $"{category} item with id = {id} has been requested.");
}
プロキシに基づいて追加されたファイル。JSON
{
"$schema": "http://json.schemastore.org/proxies",
"proxies": {
"GetJustArtinAroundStorageLinkProxy": {
"matchCondition": {
"route": "/products/{category:alpha}/{id}",
"methods": [
"GET"
]
},
"backendUri": "https://<company-name>.azurewebsites.net/api/products/{category:alpha}?id={id}"
}
}
}
これは動作していないようです。 500 - 内部サーバーエラーを返します。私は、xファンクションキーのヘッダとコードクエリパラメータの両方のキーを関数に渡しました。さらに、{category:alpha}はダッシュを許可していないので、 'break-pads'のようなものは404を返します。ロブを有効にしてBLOBストレージにプッシュしようとしましたが、表示されません働くこと。私のログコンテナは空のままです。 – Rogala
フィードバックに基づいて質問を詳細に更新しました。 – Rogala
私は上記の設定でテストしたが、問題は発生しなかった。プロキシを経由しない直接URLを使用して関数を呼び出せますか?呼び出しID、地域、エラーのおおよその時間を共有できますか?ログを確認できますか? –