首页 > 编程语言 >ASP.NET Core如何使用HttpClient调用WebService

ASP.NET Core如何使用HttpClient调用WebService

时间:2024-07-02 10:09:51浏览次数:23  
标签:Core ASP WebService url System httpClientFactory result using

原文链接:https://www.yisu.com/jc/691937.html

我们使用VS创建一个ASP.NET Core WebAPI项目,由于是使用HttpClient,首先在ConfigureServices方法中进行注入。

public void ConfigureServices(IServiceCollection services)
{
    // 注入HttpClient
    services.AddHttpClient();
    services.AddControllers();
}

  然后添加一个名为WebServiceTest的控制器,在控制器里面添加一个Get方法,在Get方法里面取调用WebService,控制器代码如下

using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Xml;

namespace HttpClientDemo.Controllers
{
    [Route("api/WebServiceTest")]
    [ApiController]
    public class WebServiceTestController : ControllerBase
    {
        readonly IHttpClientFactory _httpClientFactory;

        /// <summary>
        /// 通过构造函数实现注入
        /// </summary>
        /// <param name="httpClientFactory"></param>
        public WebServiceTestController(IHttpClientFactory httpClientFactory)
        {
            _httpClientFactory = httpClientFactory;
        }

        [HttpGet]
        public async Task<string> Get()
        {
            string strResult = "";
            try
            {
                // url地址格式:WebService地址+方法名称     
                // WebService地址:http://localhost:5010/WebTest.asmx
                // 方法名称:  PostTest
                string url = "http://localhost:5010/WebTest.asmx/PostTest";
                // 参数
                Dictionary<string, string> dicParam = new Dictionary<string, string>();
                dicParam.Add("para", "1");
                // 将参数转化为HttpContent
                HttpContent content = new FormUrlEncodedContent(dicParam);
                strResult = await PostHelper(url, content);
            }
            catch (Exception ex)
            {
                strResult = ex.Message;
            }

            return strResult;
        }

        /// <summary>
        /// 封装使用HttpClient调用WebService
        /// </summary>
        /// <param name="url">URL地址</param>
        /// <param name="content">参数</param>
        /// <returns></returns>
        private async Task<string> PostHelper(string url, HttpContent content)
        {
            var result = string.Empty;
            try
            {
                using (var client = _httpClientFactory.CreateClient())
                using (var response = await client.PostAsync(url, content))
                {
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        result = await response.Content.ReadAsStringAsync();
                        XmlDocument doc = new XmlDocument();
                        doc.LoadXml(result);
                        result = doc.InnerText;
                    }
                }
            }
            catch (Exception ex)
            {
                result = ex.Message;
            }
            return result;
        }
    }
}

  然后启动调试,查看输出结果

 调试的时候可以看到返回结果,在看看页面返回的结果。

ASP.NET Core如何使用HttpClient调用WebService

这样就完成了WebService的调用。生产环境中我们可以URL地址写在配置文件里面,然后程序里面去读取配置文件内容,这样就可以实现动态调用WebService了。我们对上面的方法进行改造,在appsettings.json文件里面配置URL地址

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  // url地址
  "url": "http://localhost:5010/WebTest.asmx/PostTest"
}

  修改控制器的Get方法

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Xml;

namespace HttpClientDemo.Controllers
{
    [Route("api/WebServiceTest")]
    [ApiController]
    public class WebServiceTestController : ControllerBase
    {
        readonly IHttpClientFactory _httpClientFactory;
        readonly IConfiguration _configuration;

        /// <summary>
        /// 通过构造函数实现注入
        /// </summary>
        /// <param name="httpClientFactory"></param>
        public WebServiceTestController(IHttpClientFactory httpClientFactory, IConfiguration configuration)
        {
            _httpClientFactory = httpClientFactory;
            _configuration = configuration;
        }

        [HttpGet]
        public async Task<string> Get()
        {
            string strResult = "";
            try
            {
                // url地址格式:WebService地址+方法名称     
                // WebService地址:http://localhost:5010/WebTest.asmx
                // 方法名称:  PostTest
                // 读取配置文件里面设置的URL地址
                //string url = "http://localhost:5010/WebTest.asmx/PostTest";
                string url = _configuration["url"];
                // 参数
                Dictionary<string, string> dicParam = new Dictionary<string, string>();
                dicParam.Add("para", "1");
                // 将参数转化为HttpContent
                HttpContent content = new FormUrlEncodedContent(dicParam);
                strResult = await PostHelper(url, content);
            }
            catch (Exception ex)
            {
                strResult = ex.Message;
            }

            return strResult;
        }

        /// <summary>
        /// 封装使用HttpClient调用WebService
        /// </summary>
        /// <param name="url">URL地址</param>
        /// <param name="content">参数</param>
        /// <returns></returns>
        private async Task<string> PostHelper(string url, HttpContent content)
        {
            var result = string.Empty;
            try
            {
                using (var client = _httpClientFactory.CreateClient())
                using (var response = await client.PostAsync(url, content))
                {
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        result = await response.Content.ReadAsStringAsync();
                        XmlDocument doc = new XmlDocument();
                        doc.LoadXml(result);
                        result = doc.InnerText;
                    }
                }
            }
            catch (Exception ex)
            {
                result = ex.Message;
            }
            return result;
        }
    }
}

  这样就可以动态调用WebService了。

标签:Core,ASP,WebService,url,System,httpClientFactory,result,using
From: https://www.cnblogs.com/Dongmy/p/18278624

相关文章

  • net core 中如何使用session
    原文链接:https://zhuanlan.zhihu.com/p/6373955031,在ConfigureServices方法里加入services.AddSession()配置publicvoidConfigureServices(IServiceCollectionservices){services.AddSession();} 2,在Configure里介入app.UseSession()配置注意app.UseSession();这句要......
  • asp.net Core中控制器的两个基类ApiController和Controller
    1、Controller就是我们平常建的控制器  publicclassStudyontroller:Controller。2、ApiController这个我平常很少使用,今天发现了研究了一下,值得学习,一个很不错的控制器基类。   新建一个ApiController的步骤:  请求对应的方法就是通过请求提交数据的方式......
  • 【Spark Core】RDD详解
    一、RDD基本介绍1、为什么需要RDD没有RDD之前:1.MR:只提供了map和reduce的API,而且编写麻烦,运行效率低!---早淘汰了!2.使用Python/Scala/Java的本地集合:但是只能完成本地单机版的,如果要实现分布式的,---很困难!  所以需要有一个分布式的数据抽象,也就是用该抽象,可......
  • ros - Adafruit ESP32 Feather与树莓派(Raspberry Pi)比较
    AdafruitESP32Feather和树莓派(RaspberryPi)都是广泛使用的硬件平台,分别在嵌入式系统和单板计算机领域具有各自的优势。以下是它们的详细比较,以及它们对机器人操作系统(ROS)的支持程度的分析。1.基本特性比较AdafruitESP32Feather核心处理器:双核XtensaLX6(最高240MHz)。......
  • ASP.NET Core MVC 从入门到精通之HttpContext
    原文链接:https://www.cnblogs.com/hsiang/p/17368101.html什么是HttpContext?在B/S模式开发的程序中,客户端是浏览器,服务器端Web服务程序,HttpContext是连接客户端和服务器端程序的桥梁,交代了当前请求的环境信息,它封装了请求[Request]和响应[Response]及其他所有信息,示意图如下所......
  • Microsoft.AspNetCore.Builder.ForwardedHeadersOptions
    答案为ai生成ForwardedHeadersOptions是ASP.NETCore中用于配置转发头部的一个类。当应用程序位于负载均衡器(https://blog.csdn.net/cyl101816/article/details/135195729)、反向代理服务器等后面时,由于HTTP请求会通过多个代理或转发,原始的请求头(如X-Forwarded-For和X-For......
  • ASP.NET Core 6 (.NET 6) 配置使用kestrel server
    原文链接:https://blog.csdn.net/weixin_52026996/article/details/135929070简介:Kestrel是一个跨平台的、开源的、轻量级的HTTP服务器,它是ASP.NETCore的默认Web服务器。Kestrel是跨平台的,因此可以在不同的操作系统上运行,包括Windows、Linux和macOS。本文主要介绍ASP.......
  • [Aspire] Run session could not be started
    ErrordetailsRunsessioncouldnotbestarted:failedtoconnectedtoIDErunsessionnotificationendpoint:tls:failedtoverifycertificate:x509:certificatehasexpiredorisnotyetvalidSolutionRunningthedotnetdev-certscommandsbelowtore-g......
  • 一文带您了解Fiddler的家族产品:Fiddler Classic、FiddlerCore、Fiddler和Cap、Fiddler
    最近更新了一下Fiddler(好久没更新了),然后浏览了一下官方网站,发现fillder的变化还是蛮大的,新出了好多产品,在这里我就把这些产品进行汇总比较,便于大家快速了解,快速选择自己需要的产品!Fiddler版本介绍FiddlerClassic(经典版)我们最为熟知的版本,这个版本是免费的,不过只能在Window......
  • 解决.NET Core Ajax请求后台传送参数过大请求失败问题
    原文链接:https://www.cnblogs.com/xiongze520/p/14500156.html今天在项目上遇到一个坑,在.NetCore中通过ajax向mvc的controller传递对象时,控制器(controller)的方法一直没有进去,百思不得其解,后面把传递的参数打印出来发现传递的参数比较大,有2.4M的数据,如下图:后面跟踪项目发现we......