具有Cognito身份验证的AWS API Gateway Lambda函数返回415不支持的媒体类型

时间:2018-04-19 17:56:51

标签: amazon-web-services cors .net-core aws-lambda aws-api-gateway

更新:我刚刚在CloudWatch日志中注意到,内容类型以某种方式从application / json变为text / plain。以下是WebHost字符串现在的样子:

[信息] Microsoft.AspNetCore.Hosting.Internal.WebHost:请求开始POST https://snip.execute-api.us-west-2.amazonaws.com/Stage/api/Clinician text / plain

这就是呼叫工作时的样子:

[信息] Microsoft.AspNetCore.Hosting.Internal.WebHost:请求启动POST https://snip.execute-api.us-west-2.amazonaws.com/Stage/api/Clinician application / json 然而,Postman中的标题设置了Content-Type:application / json

那么为什么内容类型会发生变化?

原帖的开头:

我正在使用Visual Studio 2017开发API网关Lambda函数"带有测试的无服务器应用程序" blueprint是一个.NET CORE解决方案。我们使用Cognito用户池进行身份验证。我正在使用Postman测试我的第一个功能。我在Cognito用户池中为用户传递了有效的ID令牌。请求通过身份验证,但以415 Unsupported Media Type响应。

在我开始传递ID令牌之前,我使用的是AWS_IAM授权程序。那时,body(content-type:application / json)将成功映射到POST参数。但是现在我正在使用Cognito用户池授权程序,在调用POST时我得到415不支持的媒体类型。 POST方法签名是:

    [HttpPost]
    public APIGatewayProxyResponse Post([FromBody]Clinician user)

我在正文中发送的样本数据是:

{
"Id": "",
"Username": "6punk",
"Title": "Punker",
"FirstName": "Six",
"MIddleName": "",
"LastName": "Punk",
"Suffix": "",
"PreferredFirstName": "",
"PreferredLastName": "",
"Email": "bogus@email.com",
"Phone": "+18015551206",
"UserSub": "",
"ClinicianTypeId": "1",
"EhrId": ""

}

如前所述,在作为IAM用户进行身份验证或通过API网关控制台中的“方法测试”窗格进行测试时,JSON完全映射到Clinician类。

我启用了CORS。 对于ANY方法,我将Integration Request类型设置为LAMBDA_PROXY。

在使用来自Cognito用户的ID令牌从Postman测试我的POST方法时,是什么原因导致415不支持的媒体类型?

1 个答案:

答案 0 :(得分:0)

事实证明,这是邮差中的一个错误。即使我已将Content-type指定为application / json,它也将内容类型作为text / plain传递。我删除了Content-Type标头,然后重新创建它并开始工作。我曾经有过Postman几天了。我不知道为什么它开始传递text / plain。我所知道的是,当我删除并重新创建Content-Type标头作为application / json时,才开始重新开始工作。