【AWS】サーバーレスAPIでリダイレクト先にパラメータわたしてみた【サーバーレス】
こんにちは!nomurabbitです。
この記事ではサーバーレスAPIで
リダイレクトした先に
パラメータを渡してみたいと思います。
過去の記事の内容を組み合わせて
実装してみます。
nomurabbit.hatenablog.jp
nomurabbit.hatenablog.jp
ソースコード
今回はパッケージの追加は不要です。
ソースコードのポイントは下記の通りです。
public ApiResponse FunctionHandler(object input, ILambdaContext context) { try { string redirectUrl = "https://hogehoge.com/redirectparamdst"; string redirectParam = "?userid=nomurabbit"; ApiRequest apiRequest = JsonSerializer.Deserialize<ApiRequest>(input.ToString(), ApiUtil.GetJsonSerializerOptionsDefault()); ApiRequestBody apiRequestBody = (apiRequest.Body == null) ? new ApiRequestBody() : JsonSerializer.Deserialize<ApiRequestBody>(apiRequest.Body, ApiUtil.GetJsonSerializerOptionsDefault()); ApiResponse apiResponse = new ApiResponse(); List<ApiResponseBody> apiResponseBodyList = new List<ApiResponseBody>(); ApiResponseBody apiResponseBody = new ApiResponseBody(); Dictionary<string, string> apiResonseHeaders = new Dictionary<string, string>{{"Access-Control-Allow-Origin", "*"},{"Access-Control-Allow-Headers", "Content-Type"}, {"Access-Control-Allow-Methods", "GET"}, {"Location", redirectUrl + redirectParam}}; Dictionary<string, string[]> apiResonseMultiValueHeaders = new Dictionary<string, string[]>{{"Set-Cookie", new string[] {"KEY1=VALUE1; SameSite=None", "KEY2=VALUE2; SameSite=None"}}}; apiResponse.IsBase64Encoded = false; apiResponse.StatusCode = HttpStatusCode.Redirect; apiResponse.Headers = apiResonseHeaders; apiResponse.MultiValueHeaders = apiResonseMultiValueHeaders; apiResponse.Body = ""; return apiResponse; } catch (System.Exception e) { ApiResponse apiResponse = new ApiResponse(); ApiResponseBody apiResponseBody = new ApiResponseBody(); Dictionary<string, string> apiResonseHeaders = new Dictionary<string, string>{{"Access-Control-Allow-Origin", "*"},{"Access-Control-Allow-Headers", "Content-Type"}, {"Access-Control-Allow-Methods", "GET"}}; Dictionary<string, string[]> apiResonseMultiValueHeaders = new Dictionary<string, string[]>{{"Set-Cookie", new string[] {"KEY1=VALUE1; SameSite=None", "KEY2=VALUE2; SameSite=None"}}}; apiResponse.IsBase64Encoded = false; apiResponse.StatusCode = HttpStatusCode.OK; apiResponse.Headers = apiResonseHeaders; apiResponse.MultiValueHeaders = apiResonseMultiValueHeaders; apiResponseBody.Message = e.Message + e.StackTrace; apiResponse.Body = JsonSerializer.Serialize(apiResponseBody); return apiResponse; } }
リダイレクトさせるメソッドでは
apiResponse.StatusCode を HttpStatusCode.Redirectにするのに加えて、
レスポンスヘッダーのLocationに
パラメータを追加しています。
public ApiResponse FunctionHandler(object input, ILambdaContext context) { try { ApiRequest apiRequest = JsonSerializer.Deserialize<ApiRequest>(input.ToString(), ApiUtil.GetJsonSerializerOptionsDefault()); ApiRequestBody apiRequestBody = (apiRequest.Body == null) ? new ApiRequestBody() : JsonSerializer.Deserialize<ApiRequestBody>(apiRequest.Body, ApiUtil.GetJsonSerializerOptionsDefault()); ApiResponse apiResponse = new ApiResponse(); ApiResponseBody apiResponseBody = new ApiResponseBody(); string targetParamKey = "userid"; Dictionary<string, string>.KeyCollection paramKeys = apiRequest.QueryStringParameters.Keys; foreach( string paramKey in paramKeys ) { if(paramKey == targetParamKey) { apiResponseBody.Message = "user id is " + apiRequest.QueryStringParameters[targetParamKey] + ". thank you!"; } } Dictionary<string, string> apiResonseHeaders = new Dictionary<string, string>{{"Access-Control-Allow-Origin", "*"},{"Access-Control-Allow-Headers", "Content-Type"}, {"Access-Control-Allow-Methods", "GET"}, {"Lambda-Result-Code", ApiUtil.RESULT_CODE_SUCCESS}, {"Lambda-Result-Message", ApiUtil.GetResultCodeDictionary()[ApiUtil.RESULT_CODE_SUCCESS]}}; Dictionary<string, string[]> apiResonseMultiValueHeaders = new Dictionary<string, string[]>{{"Set-Cookie", new string[] {"KEY1=VALUE1; SameSite=None", "KEY2=VALUE2; SameSite=None"}}}; apiResponse.IsBase64Encoded = false; apiResponse.StatusCode = HttpStatusCode.OK; apiResponse.Headers = apiResonseHeaders; apiResponse.MultiValueHeaders = apiResonseMultiValueHeaders; apiResponse.Body = JsonSerializer.Serialize(apiResponseBody); return apiResponse; } catch (System.Exception e) { ApiResponse apiResponse = new ApiResponse(); ApiResponseBody apiResponseBody = new ApiResponseBody(); apiResponseBody.Message = "error" + e.Message + e.StackTrace; Dictionary<string, string> apiResonseHeaders = new Dictionary<string, string>{{"Access-Control-Allow-Origin", "*"},{"Access-Control-Allow-Headers", "Content-Type"}, {"Access-Control-Allow-Methods", "POST"}, {"Lambda-Result-Code", ApiUtil.RESULT_CODE_ERROR}, {"Lambda-Result-Message", e.Message + "::" + e.StackTrace}}; Dictionary<string, string[]> apiResonseMultiValueHeaders = new Dictionary<string, string[]>{{"Set-Cookie", new string[] {"KEY1=VALUE1; SameSite=None", "KEY2=VALUE2; SameSite=None"}}}; apiResponse.IsBase64Encoded = false; apiResponse.StatusCode = HttpStatusCode.OK; apiResponse.Headers = apiResonseHeaders; apiResponse.MultiValueHeaders = apiResonseMultiValueHeaders; apiResponse.Body = JsonSerializer.Serialize(apiResponseBody); return apiResponse; } }
リダイレクトを受けるメソッドでは
apiRequest.QueryStringParametersから、
パラメータを取得しています。
GitHubにソースコードを載せていますので、
よければ参考にしてください。
リダイレクトさせるメソッド
github.com
リダイレクトを受けるメソッド
github.com
以上でリダイレクト先に
パラメータを渡すことができました。
よかったら試してみてください。
では!