c# 通过post请求

本文介绍两种实现HTTP POST请求的方法,并展示了如何在服务端处理请求数据及构造响应。第一种方法使用WebRequest发送请求和接收XML响应;第二种方法利用WebClient进行数据交换。此外,还提供了服务端处理请求的具体实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/// <summary>
        /// 提交数据请求  方法一
        /// </summary>
        /// <param name="POSTURL">请求提交的地址 如:http://xxx.xxx.xxx/interface/TestPostRequest</param>
        /// <param name="PostData">提交的数据(字符串)</param>
        /// <returns></returns>
        public static string RequestData(string POSTURL, string PostData)
        {
            //发送请求的数据
            WebRequest myHttpWebRequest = WebRequest.Create(POSTURL);
            myHttpWebRequest.Method = "POST";
            UTF8Encoding encoding = new UTF8Encoding();
            byte[] byte1 = encoding.GetBytes(PostData);
            myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
            myHttpWebRequest.ContentLength = byte1.Length;
            Stream newStream = myHttpWebRequest.GetRequestStream();
            newStream.Write(byte1, 0, byte1.Length);
            newStream.Close();


            //发送成功后接收返回的XML信息
            HttpWebResponse response = (HttpWebResponse)myHttpWebRequest.GetResponse();
            string lcHtml = string.Empty;
            Encoding enc = Encoding.GetEncoding("UTF-8");
            Stream stream = response.GetResponseStream();
            StreamReader streamReader = new StreamReader(stream, enc);
            lcHtml = streamReader.ReadToEnd();
            return lcHtml;
        }






        /// <summary>
        /// 通过接口提交请求的公用方法   方法二
        /// </summary>
        /// <param name="url">请求的接口地址  如:http://xxx.xxx.xxx/interface/TestPostRequest</param>
        /// <param name="senddata">要发送的报文</param>
        /// <returns></returns>
        public string GetPostStr(string url, string senddata)
        {
            System.Net.WebClient webc = new System.Net.WebClient();
            var apiurl = new Uri(url);
            string sendstr = senddata;
            webc.Headers.Add("Content-Type", "text/xml");
            //webc.Headers["Content-Type"] = "application/stream;charset=utf-8";//OK  
            var arr = webc.UploadData(apiurl, Encoding.UTF8.GetBytes(sendstr)); 
            return Encoding.UTF8.GetString(arr) ;
        }




 










        /// <summary>
        /// 服务端接收请求、处理并返回响应的数据
        /// </summary>
        public void TestPostRequest()
        {
            StreamReader reader = new StreamReader(System.Web.HttpContext.Current.Request.InputStream);
            String xmlData = reader.ReadToEnd();


            //string strRequestData = "接收到的请求数据是:" + xmlData;
            //string strReponseData = "要返回的数据是:" + "<root><attReaderName>1</attReaderName></root>";
            string strReponseData= "";
            strReponseData+= "<root>" +
                       "<head>" +
                       "<errorCode>0</errorCode>" +
                       "<result>success</result>" +
                       "</head>" +
                       "</root>";


            HttpContext.Current.Response.Write(strReponseData);
        }
C#中,如果你需要使用POST请求并且包含WSSE (Web Services Security Extensions) 的 UsernameToken 来进行身份验证,你可以使用`HttpClient`类以及一些自定义的XML文档来构建这个请求。下面是一个简单的步骤说明: 1. 首先,你需要安装`System.IdentityModel.Tokens.Jwt` NuGet包,它包含了处理JWT和WS-Security的功能。 ```bash Install-Package System.IdentityModel.Tokens.Jwt ``` 2. 创建一个WSSE的UsernameToken对象: ```csharp using Microsoft.IdentityModel.Tokens; using System.IdentityModel.Claims; var username = "your_username"; var password = "your_password"; var issuer = "your_issuer"; // 通常是你的服务URL var symmetricSecurityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(password)); var signingCredentials = new SigningCredentials(symmetricSecurityKey, SecurityAlgorithms.HmacSha256); var claimsIdentity = new ClaimsIdentity(); claimsIdentity.AddClaim(new Claim(ClaimTypes.Name, username)); var jwtToken = new JwtSecurityToken(issuer, audience: "", claims: claimsIdentity.Claims, signingCredentials: signingCredentials); var tokenHandler = new JwtSecurityTokenHandler(); var xmlToken = tokenHandler.WriteToken(jwtToken); ``` 3. 使用HttpClient发起POST请求,并将WSSE头添加到请求中: ```csharp using System.Net.Http.Headers; using System.Text; HttpClient httpClient = new HttpClient(); string requestUri = "http://your_api_url"; // 将XML Token转换为Base64字符串 string encodedXmlToken = Convert.ToBase64String(Encoding.UTF8.GetBytes(xmlToken)); // 构建WWW-Authenticate header string authenticateHeader = $"WSSE {SecurityTokenSerializer.XmlDsigSignatureElementQualifiedName}: UsernameToken=\"" + encodedXmlToken + "\""; // 设置请求头 HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, requestUri) { Content = new StringContent("Your Request Data", Encoding.UTF8, "application/json"), Headers.Authorization = new AuthenticationHeaderValue("WSSE", authenticateHeader), }; // 发送请求 HttpResponseMessage response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值