首页 > 解决方案 > 在 .NET Core 中干燥 Azure 函数应用程序

问题描述

定义 Azure 函数应用程序我有许多几乎相同的函数:

public static class FunctionA
{
    [FunctionName("function_a")]
    public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "post")]HttpRequest request, ILogger logger)
    {
        //... Authentication, etc

        return result = ServiceA.Do(request);
    }
}


public static class FunctionB
{
    [FunctionName("function_b")]
    public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "post")]HttpRequest request, ILogger logger)
    {
        //... Authentication, etc

        return result = ServiceB.Do(request);
    }
}

//...

有没有办法干燥这个代码?

理想情况下,我希望使用泛型进行继承,但我不能,因为静态类只能从对象继承。

标签: .net.net-coreazure-functions

解决方案


我想到的一个想法是使用路由。您基本上只定义一个外部 HTTP 触发函数并根据路由属性在其中切换。像这样的东西:

[FunctionName("function_external")]
public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "service/{service}")]HttpRequest request, string service, ILogger logger)
{
    //... Authentication, etc

    // Depending on how many cases you have, you probably want some smarter lookup here
    switch(service)
    {
       case "a": return ServiceA.Do(request);
       //...
    }
}

这不是一个完美的通用解决方案,但至少您今天可以轻松实现。


推荐阅读