У меня есть функция. 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, как я должен гарантировать, что желаемые коды ответа возвращаются клиенту?