Pie*_*gau 7 c# azure azure-compute-emulator azure-functions
所以我一直在尝试创建一个简单的 azure 函数,这将是一个 http 触发器“CreateUser”。
我做了另一个 http 触发器来简化问题,它看起来很简单:
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
namespace TutoTableAzureTemplate
{
public static class TestTrigger
{
[FunctionName("TestTrigger")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
{
return req.CreateResponse(HttpStatusCode.OK, "This request arrived succcesfully");
}
}
}
Run Code Online (Sandbox Code Playgroud)
这在模拟器上运行,给我带来了以下错误:
Error indexing method 'TestTrigger.Run'. Microsoft.Azure.WebJobs.Host: Cannot bind parameter 'log' to type TraceWriter. Make sure the parameter Type is supported by the binding.
Run Code Online (Sandbox Code Playgroud)
(我的模拟器版本是 5.3)
我试图删除参数TraceWriter log
,并且函数“运行”正常......直到我使用 Postman 向它发送一个 http 请求,这带来了关于 WebJobs 的错误:
"System.InvalidOperationException : 'TestTrigger' can't be invoked from Azure WebJobs SDK. Is it missing Azure WebJobs SDK attributes? ... "
Run Code Online (Sandbox Code Playgroud)
我想知道该属性是否TraceWriter log
是导致先前问题的属性,是否有办法将其带回这里...
哦,顺便说一下,我进入了某种版本的地狱冲突,出于某种原因,使用 .NET Standard 2.0 而不是我之前使用的 .NET 461,以及教程建议。
这是我的 .csproj :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.13" />
<PackageReference Include="Microsoft.Azure.Storage.Common" Version="9.0.0.1-preview" />
<PackageReference Include="Microsoft.Azure.CosmosDB.Table" Version="1.1.1" />
</ItemGroup>
<ItemGroup>
<Reference Include="Microsoft.CSharp" />
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
"Microsoft.Azure.CosmosDB.Table"
显然在 .NET Standard 2.0 中不可用,并且 .NET 461 版本在此处重新发布,但“这只是一个警告”......并且"Microsoft.Azure.Storage.Common"
仅在预览版中。
这可能与某个地方的某个版本有关,但我在使用不同内容的教程中迷失了自己,而且由于我对 Azure 相当陌生,我不知道发生了什么......
'TestTrigger' can't be invoked from Azure WebJobs SDK. Is it missing Azure WebJobs SDK attributes?"
我刚刚在v4
运行的函数中遇到了相同的错误.Net 6.0
错误。
就我而言,这就像一条糟糕的路线一样简单,如下所示:
public async Task<Models.BinaryFile> GetAsync([HttpTrigger(AuthorizationLevel.Function, "get",
Route = BaseUrl)] HttpRequest req, Guid fileId, ILogger log)
{
// [logic to get file here...]
return file;
}
Run Code Online (Sandbox Code Playgroud)
应该是这样的:
public async Task<Models.BinaryFile> GetAsync([HttpTrigger(AuthorizationLevel.Function, "get",
Route = BaseUrl + "/{fileId}")] HttpRequest req, Guid fileId, ILogger log)
{
// [logic to get file here...]
return file;
}
Run Code Online (Sandbox Code Playgroud)
注意这部分:Route = BaseUrl + "/{fileId}"
.
修复超级简单,但令人烦恼的是它没有遇到任何断点,这让我很难精确定位。
出于某种原因,必须使用 .NET Standard 2.0 而不是我之前使用的 .NET 461,以及教程建议。
似乎当您创建 azure 函数初始时,您的函数是 .NET 461,出于某种原因,您将其更改为 .NET Standard 2.0。
但是,当您的函数是 .NET Standard 2.0 时,您的运行时版本应设置为 beta。
所以添加AzureFunctionsVersion
你的 .csproj,因为默认的.NET 461 运行时是 1,当你更改为 .NET core 时,你需要手动将运行时更改为“ beta ”。
您可以参考以下代码:
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<AzureFunctionsVersion>v2</AzureFunctionsVersion>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8971 次 |
最近记录: |