2017-09-05 32 views
0

我有一個C#方法,我已成功發佈爲AWS Lambda函數。它看起來像這樣:如何將查詢字符串值從AWS API網關傳遞到Lambda 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. 創建一個新的API
  2. 創建一個新的資源名稱爲「MyClass的」和路徑「/ myclass」
  3. 爲資源創建新的GET方法,使用「Lambda函數」作爲集成類型,並指向我的Lambda函數。

我希望能夠打電話給我這樣的lambda函數(不傳入請求的任何指定的頭): https://xxx.execute-api.us-east-2.amazonaws.com/prod/myclass?paramA=valueA&paramB=valueB

我不確定如何讓我的查詢字符串參數通過傳遞給拉姆達功能。無論我嘗試什麼,request.QueryStringParameters始終爲空。

這裏的正確程序是什麼?

回答

1

好的我已經找到了問題。

APIGatewayProxyRequest是從傳遞給Lambda函數的JSON反序列化的對象。你可以看到,被傳遞給lambda函數的原始JSON,如果你接受JObject作爲,而不是第一個參數:

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

但是,使用API​​GatewayProxyRequest實際上並不是必需的。接受JObject作爲Lambda函數的第一個參數比較容易,然後您可以訪問任何您需要的JSON。然後,您可以使用像Vaibs的答案中描述的技術。

0

請使用「$ input.params('YourQueryStringKey')」。

您可以在API網關集成響應中創建正文映射模板,並嘗試「$ input.params('YourQueryStringKey')」或直接在Lambda函數內部。

+0

嗨,那是我嘗試過的一件事情 - 請問您可以更具體地瞭解我的身體映射模板或Lambda函數的具體含義? – 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. 去API網關

  2. 點擊您適當的方法即GET方法

  3. 去方法執行

  4. 在方法執行,選擇URL查詢字符串參數。

  5. 添加查詢字符串參數一樣paramA上,paramB

  6. 現在去合併請求選項卡

  7. 選擇身體的映射模板,內容類型application/JSON

  8. 生成模板像下面

    { 
    "paramA": "$input.params('paramA')", 
    "paramB": "$input.params('paramB')" 
    } 
    
  9. 接受此鍵值在lamda函數中配對。

希望這會對您有所幫助。

+0

嗨,很抱歉,這不起作用:在Labmda函數內,request.QueryStringParameters仍爲null。你之前用過C#嗎? – cbp

+0

不,我嘗試使用java.It與java一起工作良好。 – Vaibs

相關問題