使用.Net 8,我创建了一个Azure Function项目。在我的函数中,我想在参数中填充 accountRequest 对象。我尝试通过添加
[FromBody]
属性来获取 accountRequest,但 .NET 没有映射它。我可以通过使用像 HttpRequest req
这样的 req.ReadFromJsonAsync<AccountRequest>
参数来获取主体,但为了简单起见,我宁愿使用 FromBody
。有没有办法做到这一点,或者我需要依赖req.ReadFromJsonAsync<AccountRequest>()
Run([HttpTrigger(AuthorizationLevel.Function, "post", Route = "PriceList/GetAllPriceList")]
[FromBody] AccountRequest accountRequest)
{
// accountRequest is null
}
项目详情: 我的项目指的是
Microsoft.AspNetCore.App
和 Microsoft.NETCore.App
框架。它还引用了许多 Microsoft.Azure.Functions.Worker
包,包括 Microsoft.Azure.Functions.Worker.SDK, Microsoft.Azure.Functions.Worker.Http, Microsoft.Azure.Functions.Worker.Http.AspNetCore.
我的项目包括一个类“AccountRequest”,定义为:
public class AccountRequest
{
public string? AccountId { get; set; }
}
我使用 Postman 将 json 发布到该方法:
{ "AccountId": "bed94a30-0fc5-ea11-a812-000d3a531257" }
Program类Main方法有以下内容:
var host = new HostBuilder().ConfigureFunctionsWebApplication()…
我已修改代码如下,以使用 .Net8 隔离函数中的 [FromBody]
属性获取
函数.cs-
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
using System.Net;
namespace _78391282
{
public class Function1
{
private readonly ILogger<Function1> _logger;
public Function1(ILogger<Function1> logger)
{
_logger = logger;
}
[Function("Function1")]
public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "PriceList/GetAllPriceList")] HttpRequestData req,
[FromBody] AccountRequest accountRequest)
{
_logger.LogInformation("C# HTTP trigger function processed a request.");
var response = req.CreateResponse(HttpStatusCode.OK);
response.WriteString($"Account Id is: {accountRequest.AccountId}");
return response;
}
}
public class AccountRequest
{
public string? AccountId { get; set; }
}
}
Program.cs
文件如下所示-
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.ConfigureServices(services =>
{
services.AddApplicationInsightsTelemetryWorkerService();
services.ConfigureFunctionsApplicationInsights();
})
.Build();
host.Run();
我在
.csproj
文件中有以下软件包。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
<OutputType>Exe</OutputType>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<RootNamespace>_78391282</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.20.1" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.1.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.16.4" />
<PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.21.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.ApplicationInsights" Version="1.1.0" />
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
<ItemGroup>
<Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext" />
</ItemGroup>
</Project>
我能够在调用函数 URL 时获得预期的响应。