Вернуть код ответа 401 из конфигурации SAM шлюза API - PullRequest
0 голосов
/ 27 мая 2020

У меня есть функция. NET Core Lambda, вызываемая через API-шлюз, который вызывает этот метод:

[Microsoft.AspNetCore.Mvc.HttpGet("{key}", Name = "Get")]
public async Task<IEnumerable<TestData>> Get(string key)
{
    var exceptionMessage = new HttpResponseMessage(HttpStatusCode.Unauthorized) { ReasonPhrase = "UNAUTHORIZED" };
    throw new HttpResponseException(exceptionMessage);
}

События, часть функции AWS::Serverless::Function:

Events:
 Root:
  Type: Api
  Properties:
    RestApiId: !Ref TestApi
    Path: /
    Method: ANY
 ProxyResource:
  Type: Api
  Properties:
    RestApiId: !Ref TestApi
    Path: /{proxy+}
    Method: ANY

Я хотел бы, чтобы API возвращал клиенту код ответа 401, но на самом деле я получаю 500:

errortype → HttpResponseException

(я тестирую локально с помощью sam local start-api)

Я борюсь с документацией, но я думаю, мне нужно установить GatewayResponses ?

Я пробовал добавить это в GatewayResponses:

Resources:
  TestApi:
    Type: 'AWS::Serverless::Api'
    Properties:
      StageName: Prod
      GatewayResponses:
        UNAUTHORIZED:
          StatusCode: 401
            ResponseTemplates:
              "application/json": '{ "message": "UNAUTHORIZED" }'
      Auth:
        AddDefaultAuthorizerToCorsPreflight: false
        DefaultAuthorizer: CognitoAuthorizer
        Authorizers:
          CognitoAuthorizer:
            UserPoolArn: <MyARN>

В рамках SAM, как я должен гарантировать, что желаемые коды ответа возвращаются клиенту?

...