ASP.NET Core使用HttpClient调用WebService

 更新时间:2022年03月26日 11:06:02   作者:.NET开发菜鸟  
这篇文章介绍了ASP.NET Core使用HttpClient调用WebService的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、创建WebService

我们使用VS创建一个WebService,增加一个PostTest方法,方法代码如下

using System.Web.Services;

namespace WebServiceDemo
{
    /// <summary>
    /// WebTest 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 
    // [System.Web.Script.Services.ScriptService]
    public class WebTest : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }

        [WebMethod]
        public string PostTest(string para)
        {
            return $"返回参数{para}";
        }
    }
}

创建完成以后,我们发布WebService,并部署到IIS上面。保证可以在IIS正常浏览。

二、使用HttpClient调用WebService

我们使用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;
        }
    }
}

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

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

这样就完成了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了。 

到此这篇关于ASP.NET Core使用HttpClient调用WebService的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Asp.Net中的Action和Func委托实现

    Asp.Net中的Action和Func委托实现

    这篇文章主要介绍了Asp.Net中的Action和Func委托的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • DataSet与DataTable的区别示例介绍

    DataSet与DataTable的区别示例介绍

    DataSet:数据集。一般包含多个DataTable,而DataTable就是一个数据表,需要的朋友可以参考下
    2014-06-06
  • 使用.Net实现多线程经验总结

    使用.Net实现多线程经验总结

    这篇文章主要介绍了使用.Net实现多线程经验总结,需要的朋友可以参考下
    2014-12-12
  • asp.net 对中文汉字的加密与解密代码

    asp.net 对中文汉字的加密与解密代码

    一般的加密方法,解密比较复杂,所有大家看可以尝试用下面的代码。
    2009-05-05
  • asp.net实现根据城市获取天气预报的方法

    asp.net实现根据城市获取天气预报的方法

    这篇文章主要介绍了asp.net实现根据城市获取天气预报的方法,涉及asp.net调用新浪接口获取天气预报信息的实现技巧,非常简单实用,需要的朋友可以参考下
    2015-12-12
  • jQuery实现金额录入框

    jQuery实现金额录入框

    前端开发过程中,通常会用到数值录入框,比如要求输入金额,禁止录入非数值字符,也禁止粘贴非数值字符,本文主要对其实现方法进行介绍,需要的朋友一起来看下吧
    2016-12-12
  • Asp.net core WebApi 使用Swagger生成帮助页实例

    Asp.net core WebApi 使用Swagger生成帮助页实例

    本篇文章主要介绍了Asp.net core WebApi 使用Swagger生成帮助页实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-04-04
  • .net WINFORM的GDI双缓冲的实现方法

    .net WINFORM的GDI双缓冲的实现方法

    下面小编就为大家分享一篇.net WINFORM的GDI双缓冲的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • .net简单使用Log4net的方法(多个日志配置文件)

    .net简单使用Log4net的方法(多个日志配置文件)

    log4net是.net中常用的一个日志记录工具,下面这篇文章主要给大家介绍了关于.net简单使用Log4net的方法(多个日志配置文件),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2018-11-11
  • ASP.NET MVC中的AJAX应用

    ASP.NET MVC中的AJAX应用

    这篇文章主要介绍了ASP.NET MVC中的AJAX应用的相关资料,需要的朋友可以参考下
    2014-10-10

最新评论