Почему я получаю HTTP 406 от AWS API Gateway Lambda - PullRequest
0 голосов
/ 22 апреля 2020

У меня AS PNET core AWS Lambda Function. Я получаю сообщение об ошибке http 406.

Я полагаю, что запрос даже не перенаправляется к фактической функции (все журналы c удалены, и только код журнала не оставляет следов).

Я настроил шлюз API с двоичным типом заголовка «application / octet-stream». Я могу вернуть двоичный тип из другой функции.

Сигнатура функции выглядит следующим образом:

        [HttpGet("{id}/image")]
        [Produces("application/octet-stream")]
        [SwaggerResponse(typeof(FileContentResult))]
        [SwaggerResponse(typeof(NotFoundObjectResult))]
        [SwaggerResponse(typeof(BadRequestObjectResult))]
        public ActionResult GetImage(Guid id)
        {
...
        }


Вывод отладки в Lambda выглядит следующим образом - с секретами XXXX вне.

Lambda Deserialize Amazon.Lambda.APIGatewayEvents.APIGatewayProxyRequest: 
{
    "resource": "/api/{proxy+}",
    "path": "/api/Part/d44ba00a-d746-475b-b7b6-2f46bbfba552/image",
    "httpMethod": "GET",
    "headers": {
        "Accept": "application/octet-stream",
        "Authorization": "XXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "CloudFront-Forwarded-Proto": "https",
        "CloudFront-Is-Desktop-Viewer": "true",
        "CloudFront-Is-Mobile-Viewer": "false",
        "CloudFront-Is-SmartTV-Viewer": "false",
        "CloudFront-Is-Tablet-Viewer": "false",
        "CloudFront-Viewer-Country": "US",
        "Host": "XXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXX",
        "Via": "1.1 XXXXXXXXXXcc.cloudfront.net (CloudFront)",
        "X-Amz-Cf-Id": "XXXXXXXXXXXXXXXXXXXX==",
        "X-Amzn-Trace-Id": "Root=1-5ea059a8-91aeb6a4e26516e0fbf984c0",
        "X-Forwarded-For": "54.152.206.178, 70.132.33.148",
        "X-Forwarded-Port": "443",
        "X-Forwarded-Proto": "https"
    },
    "multiValueHeaders": {
        "Accept": [
            "application/octet-stream"
        ],
        "Authorization": [
            "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
        ],
        "CloudFront-Forwarded-Proto": [
            "https"
        ],
        "CloudFront-Is-Desktop-Viewer": [
            "true"
        ],
        "CloudFront-Is-Mobile-Viewer": [
            "false"
        ],
        "CloudFront-Is-SmartTV-Viewer": [
            "false"
        ],
        "CloudFront-Is-Tablet-Viewer": [
            "false"
        ],
        "CloudFront-Viewer-Country": [
            "US"
        ],
        "Host": [
            "XXXXXXXXXXXXXXXXXXXXXXXXXXX"
        ],
        "Via": [
            "XXXXXXXXXXXXXXXXXX (CloudFront)"
        ],
        "X-Amz-Cf-Id": [
            "XXXXXXXXXXXXXXXXXXXX="
        ],
        "X-Amzn-Trace-Id": [
            "Root=1-5ea059a8-91aeb6a4e26516e0fbf984c0"
        ],
        "X-Forwarded-For": [
            "54.152.206.178, 70.132.33.148"
        ],
        "X-Forwarded-Port": [
            "443"
        ],
        "X-Forwarded-Proto": [
            "https"
        ]
    },
    "queryStringParameters": null,
    "multiValueQueryStringParameters": null,
    "pathParameters": {
        "proxy": "Part/d44ba00a-d746-475b-b7b6-2f46bbfba552/image"
    },
    "stageVariables": null,
    "requestContext": {
        "resourceId": "m3mou9",
        "authorizer": {
            "claims": {
                "sub": "XXXXXXXXXXXXXXX",
                "aud": "XXXXXXXXXXXXXXXXXXXX",
                "event_id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
                "token_use": "id",
                "auth_time": "1587567015",
                "iss": "https://cognito-idp.us-east-1.amazonaws.com/uXXXXXXXXXXXXXXXXXX,
                "cognito:username": "XXXXXXXXXXXXXXXXXXXXXX",
                "exp": "Wed Apr 22 15:50:15 UTC 2020",
                "iat": "Wed Apr 22 14:50:15 UTC 2020",
                "email": "XXXXXXXXXXXXXXXXXXXXXX"
            }
        },
        "resourcePath": "/api/{proxy+}",
        "httpMethod": "GET",
        "extendedRequestId": "LZLyaEJ6IAMFaHg=",
        "requestTime": "22/Apr/2020:14:50:16 +0000",
        "path": "/api/Part/d44ba00a-d746-475b-b7b6-2f46bbfba552/image",
        "accountId": "XXXXXXXXXXXXXXXXXX",
        "protocol": "HTTP/1.1",
        "stage": "prod",
        "domainPrefix": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "requestTimeEpoch": 1587567016935,
        "requestId": "5e1330df-c328-43cb-a5f7-afb4a00f347c",
        "identity": {
            "cognitoIdentityPoolId": null,
            "accountId": null,
            "cognitoIdentityId": null,
            "caller": null,
            "sourceIp": "54.152.206.178",
            "principalOrgId": null,
            "accessKey": null,
            "cognitoAuthenticationType": null,
            "cognitoAuthenticationProvider": null,
            "userArn": null,
            "userAgent": null,
            "user": null
        },
        "domainName": "XXXXXXXXXXXXXoud",
        "apiId": "XXXXXXXXXXXXXXXXXXX"
    },
    "body": null,
    "isBase64Encoded": false
}

Лямбда-ответ:

{
    "statusCode": 406,
    "headers": {},
    "multiValueHeaders": {
        "Content-Type": [
            null
        ]
    },
    "body": "",
    "isBase64Encoded": false
}

Запрос выглядит так:

GET https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXX/api/Part/d44ba00a-d746-475b-b7b6-2f46bbfba552/image HTTP/1.1
Accept: application/octet-stream
Authorization: XXXXXXXXXXXXXXXXXXXXXXXX
Host: XXXXXXXXXXXXXXXXXXXXXXX

Есть мысли о том, почему я получаю http 406?

...