我正在尝试调用Azure HTTP触发器内的API。我有一个需要从Azure函数调用的.NET核心API。该API工作正常。当我尝试实现触发器时,收到此错误。Microsoft.Extensions.DependencyInjection.Abstractions: Unable to resolve service for type 'WebApplication1.Controllers.ContactsController' while attempting to activate 'FunctionApp1.Function1'.
.NET核心API和Azure功能位于同一解决方案中,但属于不同的项目。
这是触发器的实现
namespace FunctionApp1
{
public class Function1
{
private readonly ContactsController _contacts;
public Function1(ContactsController _contacts)
{
this._contacts = _contacts;
}
[FunctionName("Function1")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
ILogger log)
{
var response = await _contacts.GetContacts();
return new OkObjectResult(response);
}
}
}
告诉我这有什么问题。谢谢。
1条答案
按热度按时间siotufzp1#
控制器不是客户端,它属于API项目,尽管声明为
public
,但在API项目之外没有任何意义(以及可能需要示例化控制器以对其进行测试的单元测试项目,但这与这个问题无关)。要调用API,您需要一个HttpClient,它可以向所需API操作的URL发出Web请求。你得到的错误是告诉你Functions宿主没有足够的信息来创建构造函数依赖项的示例,在你的例子
ContractsController
中,这对你来说没有用,你实际需要的是一个IHttpClientFactory
:并使用此命令创建一个客户端来发出请求:
仍然需要配置主机以注入HttpClientFactory,因此如果您还没有startup类,请在函数应用中定义一个startup类:
.AddHttpClient();
是Microsoft.Extensions.Http提供的帮助器方法,用于配置依赖注入逻辑,以便主机知道如何注入HttpClients,有关完整说明,请参见documentation。