.net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler

asp.net core IHttpClientFactroy 进行SSL(https)请求时注入ConfigurePrimaryHttpMessageHandler解决https请求错误:
static public class CreditScoreServiceExtension
    {
        static public void AddCreditScoreQueryServiceHttpClient(this IServiceCollection services, IConfiguration config)
        {
            services.AddSingleton<ICreditScoreQueryService, CreditScoreQueryService>();

            //var serviceUrl = config.GetSection("AppSettings").GetSection("FC").GetSection("CreditScore")["ServiceUrl"];

            //var baseUri = new Uri(serviceUrl);

            services.AddHttpClient<ICreditScoreQueryService, CreditScoreQueryService>(client => { })
            .ConfigurePrimaryHttpMessageHandler(() =>
            {
                var handler = new HttpClientHandler();
                //if (baseUri.Scheme.ToLower() == "https")
                //{
                //    handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; };
                //}

                handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true;

                return handler;
            }).SetHandlerLifetime(TimeSpan.FromMinutes(5));
        }
}
### ASP.NET Core Web API 中实现依赖注入 在 ASP.NET Core Web API 中,依赖注入是一种设计模式,它允许对象定义其依赖关系而不必自己创建它们。这使得应用程序更易于测试和维护。 #### 配置依赖注入容器 为了设置依赖注入,在 `Program.cs` 文件中可以配置服务提供者: ```csharp public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>() .UseDefaultServiceProvider(options => { }); }); } ``` 这段代码展示了如何初始化主机并指定启动类[^3]。 #### 注册服务到 DI 容器 接着是在 `Startup.cs` 或其他适当位置注册所需的服务实例。对于内置的DI框架而言,可以在 `ConfigureServices` 方法内完成此操作: ```csharp public void ConfigureServices(IServiceCollection services) { // 添加控制器支持 services.AddControllers(); // 将 IGreeter 接口的具体实现作为单例注册进容器 services.AddSingleton<IGreeter, GreeterService>(); // 如果有更多服务,则继续添加... } ``` 这里使用了 `AddSingleton<TInterface,TImplementation>()` 来向容器中添加了一个名为 `GreeterService` 的具体实现,并将其映射给 `IGreeter` 接口[^4]。 #### 使用构造函数注入获取服务 最后一步就是在需要的地方通过构造函数参数接收这些已注册的服务。比如在一个控制器里这样做: ```csharp [ApiController] [Route("[controller]")] public class HelloWorldController : ControllerBase { private readonly IGreeter _greeter; public HelloWorldController(IGreeter greeter) { _greeter = greeter; } [HttpGet("{name}")] public IActionResult Get(string name) { var greetingMessage = _greeter.Greet(name); return Ok(new { Message = greetingMessage }); } } ``` 在这个例子中,当请求到达 `/helloWorld/{name}` 路径时,会调用 `_greeter.Greet()` 方法返回问候消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值