文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-29 16:55

关注

本文小编为大家详细介绍“ASP.NET Core如何使用HttpClient调用WebService”,内容详细,步骤清晰,细节处理妥当,希望这篇“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;        }    }}

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

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

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

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了。 

读到这里,这篇“ASP.NET Core如何使用HttpClient调用WebService”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯