2017-09-05 19 views
0

AWSラムダ関数として正常に公開したC#メソッドがあります。AWS APIゲートウェイのクエリーストリング値をラムダC#関数に渡す方法

public class MyClass 
{ 
    public async Task<APIGatewayProxyResponse> Test(APIGatewayProxyRequest request, ILambdaContext context) 
    { 
     return new APIGatewayProxyResponse 
     { 
      Body = "Body: " + request.Body 
        + Environment.NewLine 
        + "Querystring: " + (request.QueryStringParameters == null ? "null" : string.Join(",", request.QueryStringParameters.Keys)), 
      StatusCode = 200 
     }; 
    } 
} 

私は、Webインターフェイスを介して私のAPIゲートウェイを設定するには、次のことを行っている:それはこのようになります

  1. 名「MyClassの」との新しいリソースを作成した新しいAPI
  2. を作成し、パス "/ myclass"
  3. リソースの新しいGETメソッドを作成しました。統合型として "Lambda Function"を使用し、ラムダ関数を指しています。

私は(要求で指定した任意のヘッダを渡さずに)このように私のラムダ関数を呼び出すことができるようにしたい: https://xxx.execute-api.us-east-2.amazonaws.com/prod/myclass?paramA=valueA&paramB=valueB

私は私のクエリ文字列パラメータはラムダに通過するために取得する方法がわかりませんよ関数。何を試しても、request.QueryStringParametersは常にnullです。

ここから正しい手順は何ですか?

答えて

1

私は問題を把握しました。

APIGatewayProxyRequestは、ラムダ関数に渡されたJSONからデシリアライズされたオブジェクトです。あなたが代わりに最初のパラメータとしてjオブジェクトを受け入れる場合、ラムダ関数に渡されている生のJSONを見ることができます:

public async Task<APIGatewayProxyResponse> Test(JObject request, ILambdaContext context) 
{ 
    return new APIGatewayProxyResponse 
    { 
     Body = request.ToString(), 
     StatusCode = 200 
    }; 
} 

のでAPIGatewayProxyRequestを埋めるために、ボディマッピングテンプレートで指定されたJSONが一致している必要がありますAPIGatewayProxyRequestのプロパティスキーマの例を示します(必要な実際のテンプレートは表示されません)。https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-simple-proxy-for-lambda-input-format

ただし、APIGatewayProxyRequestを使用することは実際には必要ありません。ラムダ関数の最初のパラメータとしてJObjectを受け入れるほうが簡単です。必要なJSONにアクセスできます。 Vaibsの答えに記載されているようなテクニックを使用できます。

0

「$ input.params( 'YourQueryStringKey')」を使用してください。

APIゲートウェイの統合レスポンスでボディマッピングテンプレートを作成し、「$ input.params( 'YourQueryStringKey')」またはラムダ関数内で直接試すことができます。

+0

こんにちは、これは私が試したことの1つです。私の体マッピングテンプレートやラムダ関数にそれをどのように正確に含めることができるかを具体的に教えてください。 – cbp

+0

見てください、https://aws.amazon.com/blogs/compute/using-api-gateway-mapping-templates-to-handle-changes-in-your-back-end-apis/ –

+0

うーんリンクが古くなっています - 記事が書かれた後、AWSのインターフェースが2016年に変更されたと思います。残念ながら、これらの命令に従うと、同じNullReferenceExceptionが発生します。 – cbp

0

リクエストにurlクエリ文字列パラメータを設定する必要があります。

  1. あなたの適切な方法、すなわちGET法上のAPIゲートウェイ

  2. クリックに

  3. を行くURLクエリ文字列パラメータを選択し、メソッドの実行ではメソッド実行に

  4. を行きます。

  5. はparamA、paramB

  6. のようなクエリ文字列パラメータを追加します。今の統合要求]タブに

  7. を行くボディマッピングテンプレート、コンテンツタイプapplication/jsonのを選択してください

  8. 以下のようなテンプレートを生成
    { 
    "paramA": "$input.params('paramA')", 
    "paramB": "$input.params('paramB')" 
    } 
    
  9. このキー値をラムダ関数のペア。

これは役に立ちます。

+0

こんにちは、申し訳ありませんが動作しません:request.QueryStringParametersはまだLabmda関数内でnullです。前にC#で試してみましたか? – cbp

+0

いいえ、私はjavaでうまく動作しているjava.Itで試してみました。 – Vaibs

関連する問題