netcore post、get请求以及增加token方式

这篇文章展示了在C#中如何使用HttpClient类进行POST和GET网络请求。代码包括添加授权Token,处理请求头,序列化和反序列化JSON数据。示例还包含了请求失败时的错误处理。

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

        //post请求方式1    
        public async Task<string> GetResponse(Dictionary<string, string> parameters, string requestUri, string token)
        {
            using HttpClient httpClient = new();
            //添加请求头
            if (!string.IsNullOrWhiteSpace(token))
            {
                httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
            }
            //拼接地址
            if (parameters != null)
            {
                var strParam = string.Join("&", parameters.Select(o => o.Key + "=" + o.Value));
                requestUri = string.Concat(requestUri, '?', strParam);
            }
            httpClient.BaseAddress = new Uri(requestUri);
            //client.DefaultRequestHeaders.Add("Content-Type", "application/json; charset=utf-8");
            return httpClient.GetStringAsync(requestUri).Result;
        }


        /// <summary>
        /// post请求方式2   
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="url"></param>
        /// <param name="postData"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        public static T PostResponse<T>(string url, string postData, string token = "") where T : class, new()
        {
            T result = default;
            HttpContent httpContent = new StringContent(postData);
            httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
            httpContent.Headers.ContentType.CharSet = "utf-8";
            using HttpClient httpClient = new();
            if (!string.IsNullOrWhiteSpace(token))
            {
                //httpContent.Headers.Add("Authorization", $"Bearer {token}");
                httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
            }           
            HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
            if (response.IsSuccessStatusCode)
            {
                Task<string> t = response.Content.ReadAsStringAsync();
                string s = t.Result;
                string json = JsonConvert.DeserializeObject(s).ToString();
                result = JsonConvert.DeserializeObject<T>(json);
            }
            return result;
        }

        /// <summary>
        /// Get请求方法
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="url"></param>
        /// <param name="postData"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        public static T GetResponse<T>(string url, string token = "", string postData = "")
        {
            T result = default;
            HttpContent httpContent = new StringContent(postData);
            httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
            httpContent.Headers.ContentType.CharSet = "utf-8";
            using HttpClient httpClient = new();
            if (!string.IsNullOrWhiteSpace(token))
            {
                //httpContent.Headers.Add("Authorization", $"Bearer {token}");
                httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
            }            
            HttpResponseMessage response = httpClient.GetAsync(url).Result;
            if (response.IsSuccessStatusCode)
            {
                Task<string> t = response.Content.ReadAsStringAsync();
                string s = t.Result;
                string json = JsonConvert.DeserializeObject(s).ToString();
                result = JsonConvert.DeserializeObject<T>(json);
            }
            return result;
        }


-----------------------post调用方式---------------------------
        /// <summary>
        /// 请求
        /// </summary>
        /// <returns></returns>
        public ValueTuple<bool,string,string,string, string> GetSanShuiVideoByVIdAndChannel(int vehicleID, int channel)
        {
            string url = "";//视频URL            
            string channelName = "";//通道名称           
            string iCarVersionName = ""; //平台名称
            bool isSuccess = false;//判断是否请求成功
            string msg = "";//返回信息
            var reqUrl = "";
            var postData = new { vehicleID = vehicleID, channel = channel };
            string json = JsonConvert.SerializeObject(postData);
            SanShuiVideoModel resModel = HARequestHelper.PostResponse<SanShuiVideoModel>(reqUrl, json, GetSanShuiToekn());
            if (resModel != null)
            {
                isSuccess = resModel.isSuccess;
                msg = resModel.msg;
                url = resModel.obj?.data?.rtvUrl;
                channelName = resModel.obj?.data?.channelName;
                iCarVersionName = resModel.obj?.data?.iCarVersionName;                
            }
            return ValueTuple.Create(isSuccess, url, channelName, iCarVersionName, msg);
        }

-----------------------get调用方式---------------------------

        /// <summary>
        /// get
        /// </summary>
        /// <returns></returns>
        public string GetSanShuiImgURLWay(string imgURL)
        {
            string fullImageURL = "";
            string url = "";
            var token = GetSanShuiToekn();
            SanShuiImageModel resModel = HARequestHelper.GetResponse<SanShuiImageModel>(url, token);
            if (resModel != null)
            {
                fullImageURL = resModel.obj;
            }
            return fullImageURL;
        }


-------------------------解析返回的json数据格式---------------------------
{
    "obj": {
        "data": {
            "rtvUrl": "url",
            "streamType": 1,
            "channel": 2,
            "channelName": "通道2",
            "status": 1,
            "iCarVersionCode": 4,
            "iCarVersionName": 平台,
            "device": "设备号"
        }
    },
    "error": "",
    "msg": "数据加载成功",
    "isSuccess": true,
    "url": ""
}


-----------------------C#模型---------------------

/// <summary>
    /// 模型1
    /// </summary>
    public class SanShuiVideoModel
    {
        public SanShuiVideoSecondModel obj { get; set; }
        public bool isSuccess { get; set; }
        public string msg { get; set; }
    }

	/// <summary>
    /// 模型2
    /// </summary>
    public class SanShuiVideoSecondModel
    { 
        public SanShuiVideoThirdModel data { get; set; }
    }

	/// <summary>
    /// 模型3
    /// </summary>
    public class SanShuiVideoThirdModel
    {
        /// <summary>
        /// 视频URL
        /// </summary>
        public string rtvUrl { get; set; }
        /// <summary>
        /// 通道名称
        /// </summary>
        public string channelName { get; set; }
        /// <summary>
        /// 平台名称
        /// </summary>
        public string iCarVersionName { get; set; }
    }










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值