.net - 在 .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);
}
}
//...
有没有办法干燥这个代码?
理想情况下,我希望使用泛型进行继承,但我不能,因为静态类只能从对象继承。
解决方案
我想到的一个想法是使用路由。您基本上只定义一个外部 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);
//...
}
}
这不是一个完美的通用解决方案,但至少您今天可以轻松实现。
推荐阅读
- javascript - 你如何手动关闭 reactjs-popup 中的弹出窗口?
- generics - How can a dynamically-sized object be constructed on the heap
- javascript - 我如何让我的网络应用程序只对智能手机用户可用
- html - 如何只为圆底的 25% 着色?
- javascript - ENOENT:没有这样的文件或目录,scandir './events/client'
- javascript - 只有最后一名玩家在游戏中可见
- flutter - 在我获得 url 下载我的应用程序后,我的应用程序在使用插件 inappwebview 时出现问题。谁能帮助我?
- laravel - 我想用惯性 vue2 安装 Laravel Jetstream
- javascript - 找不到向我的活动添加验证的方法
- python - 已解决 - Python CGI 访问 mySQL:头文件前的脚本输出结束