nomurabbitのブログ

nomurabbitのブログはITを中心にした技術ブログです。

nomurabbitのブログ

【AWS】サーバーレスAPIでリダイレクトしてみた【サーバーレス】

こんにちは!nomurabbitです。
この記事ではLambdaで作ったサーバーレスAPI
リダイレクトする方法を紹介します。

認証のロジックなんかで
使えそうですね。

テンプレートの準備

まず、Lambdaのテンプレートを準備します。

.NET Core3.1のテンプレートは、
この記事この記事を参考にしてください。

ソースコード

今回はパッケージの追加は不要です。

ソースコードのポイントは下記の通りです。

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();
        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", "https://www.nomurabbit.com/"}};
        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を入れるのがポイントですね。

GitHubソースコードを載せていますので、
よければ参考にしてください。

github.com

Lambdaで作ったサーバーレスAPI
リダイレクトする方法は以上です。

よかったら試してみてください。
では!