在.NET内核中干燥Azure函数应用程序

在.NET内核中干燥Azure函数应用程序,.net,.net-core,azure-functions,.net,.net Core,Azure Functions,定义Azure函数应用程序我有许多几乎相同的函数: public static class FunctionA { [FunctionName("function_a")] public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "post")]HttpRequest request, ILogger logger) { //.

定义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);
    }
}

//...
有没有办法找到这个密码


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

我想到的一个想法是使用路由。您基本上只需要定义一个外部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);
       //...
    }
}

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

您可以使用or进行路由

如果您使用的是azure function v2,则功能不必是静态的。