启用二进制媒体类型会破坏 AWS Lambda 中的选项 POST 调用 (CORS)

fir*_*ter 5 microservices aws-lambda asp.net-core

AWS 新手..

我们有一个 .NET Core 微服务作为 lambda 函数在无服务器 aws 实例上运行。

我们的控制器看起来像这样

[Route("api/[controller]")]
    [ApiController]
    public class SomeController : ControllerBase
    {


        [HttpGet()]
        [Route("getsomedoc")]
        public async Task<IActionResult> GetSomeDoc()
        {
            byte[] content;

            //UI needs this to process the document
            var contentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
            contentDisposition.FileName = "File Name";

            Response.Headers[HeaderNames.ContentDisposition] = contentDisposition.ToString();

            return File(content, "application/octet-stream");
        }


        [HttpPost()]
        [Route("somepost")]
        public async Task<IActionResult> SomePost()
        {
            return null;

        }
    }
Run Code Online (Sandbox Code Playgroud)

网址

{{URL}}/getsomedoc
{{URL}}/somepost
Run Code Online (Sandbox Code Playgroud)

我们已在 AWS 包设置中启用“二进制媒体类型”,以便getsomedoc 正常工作,否则它将返回字节数组而不是文件。

但是,当 UI 使用 Method: OPTIONS & Access-Control-Request-Method as POST 访问 API 时,这会破坏我们的“ somepost ”调用

当我们删除二进制媒体类型时,“ somepost ”开始工作。

寻找关于为什么会发生这种情况的建议?我们可以从网关添加/删除什么来解决这个问题。

fir*_*ter 2

好吧,我们最终以一种奇怪的方式解决了这个问题。

为 lambda 添加了两个网关 - 其​​中一个网关已启用二进制 - 另一个网关已禁用。

对于 getsomedoc - 使用启用了二进制媒体类型的一个 postsomedoc - 使用另一个

希望有更好的办法!!