gpt4 book ai didi

c# - 如何在 .Net 5 中将 Azure 函数过滤与 FunctionInitationFilterAttribute 结合使用

转载 作者:行者123 更新时间:2023-12-02 23:58:04 25 4
gpt4 key购买 nike

根据这个article ,Azure Functions 可以有一个由函数执行触发的属性:

internal class AuthorizeAttribute : FunctionInvocationFilterAttribute
{
public override async Task OnExecutingAsync(FunctionExecutingContext executingContext, CancellationToken cancellationToken)
{
var request = (HttpRequest)executingContext.Arguments["req"];
var user = await AuthorizationHandler.ValidateRequestAsync(request, executingContext.Logger);

if (user != null)
{
request.HttpContext.User.AddIdentities(user.Identities);
}
else
{
request.HttpContext.Response.StatusCode = 401;
await request.HttpContext.Response.Body.FlushAsync();
request.HttpContext.Response.Body.Close();


throw new UnauthorizedException();
}
}



[Authorize]
[FunctionName("SampleFunction")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "sample")] HttpRequest req,
ILogger log, ClaimsPrincipal user)
{
...
}

这可以让我们在执行函数之前创建一些安全检查。

遗憾的是,所有示例均适用于 Azure Functions v1-v3,并使用不同的语法。

新的 Functions 语法有些不同:

[Authorize]
[Function("GetData")]
public async Task<HttpResponseData> GetData(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "data1")] HttpRequestData req,
FunctionContext executionContext, ClaimsPrincipal claimsPrincipal)
{
...
}

使用 Microsoft.Azure.Functions.Worker 函数,未触发属性

您能给我一些关于如何修改代码以创建预执行检查的提示吗?

最佳答案

谢谢user1672994 。将您的建议作为答案发布以帮助其他社区成员。

.NETisolated还支持中间件注册,同样使用类似于ASP.NET中存在的模型。

ConfigureFunctionsWorkerDefaults扩展方法有一个重载,可让您注册自己的中间件。

var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults(workerApplication =>
{
// Register our custom middleware with the worker
workerApplication.UseMiddleware<MyCustomMiddleware>();
})
.Build();

关于c# - 如何在 .Net 5 中将 Azure 函数过滤与 FunctionInitationFilterAttribute 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68774218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com