У меня есть контроллер за AspNetCoreServer.APIGatewayProxyFunction (лямбда-функция AWS для маршрутизации в WebApi) с этим методом действия в моем контроллере:
[HttpGet("{id}")]
public async Task<MyClass> Get(ulong tagId)
{
Amazon.Lambda.Core.LambdaLogger.Log($"Get(tagId) is called with {tagId}");
return new MyClass { Id = tagId, Description = "Something" };
}
Он правильно перенаправляется на этот метод, но не передает значение, указанное как Id в URL. На самом деле проблема в том, что «id» всегда равно 0. Я изменил сигнатуру метода на «string id», но метод всегда получал пустую строку.
Удар по конечной точке APIGateway (Prod - сцена):
https://*********.execute-api.*****.amazonaws.com/Prod/api/MyController/1000
Вывод в браузере:
{
Id: 0,
Description: "Something",
}
Cloudwatch:
Get(TagId) is called with 0
Я развернул набор инструментов AWS из Visual Studio (также пробовал использовать лямбда-интерфейс командной строки dotnet без разницы). Я развернул API в консоли API Gateway. Есть другой метод действия, который возвращает все значения (без переданного аргумента методу), и он подходит, только этот метод действия со входом не может прочитать значение.
Внутри моего Startup.cs:
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public static IConfiguration Configuration { get; private set; }
// This method gets called by the runtime. Use this method to add services to the container
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseMvc();
}
Запуск этого кода локально с помощью «AWS .NET Mock Lambda Test Tool» будет таким же, Id будет 0.
Может кто-нибудь помочь мне здесь, пожалуйста? У меня заканчиваются идеи.