【C#】知识点实践序列之UrlEncode在线URL网址编码、解码

欢迎来到《小5讲堂》,大家好,我是全栈小5。
这是2024年第8篇文章,此篇文章是C#知识点实践序列文章,
博主能力有限,理解水平有限,若有不对之处望指正!
地址编码大家应该比较经常遇到和使用到,一起来看看是如何编码和解码的吧!

在这里插入图片描述

目录

  • 前言
  • 基本信息
    • 编码场景
  • 地址编码解码
    • 地址编码
      • 效果
      • 代码
    • 地址解码
      • 效果
      • 代码
  • 疑问解答

在这里插入图片描述

前言

对接过接口的小伙伴应该对地址编码不陌生,对于我们刚接触时,心中都有疑问,为什么要编码,直接原样字符串传递不可以吗?
我们带着这个疑问,一步步来解开谜团!

基本信息

C#中的地址编码和地址解码通常用于处理 URL 中的特殊字符,以确保 URL 的正确性和安全性。这种编码/解码操作可以使用
UrlEncode 和 UrlDecode 方法来完成。比如空格和问号。

编码场景

比如:C站下面的文本搜索区域,当我们输入文本搜索时,地址栏就会自动把特殊符号进行了编码
原始文本:C# URL编码?和解码&
编码文本:C%23%20URL编码%3F和解码%26
从下面,我们可以知道,#井号、空格、?问号、&和符号均被自动进行了编码
&这个和符号被编码的目的很简单,因为地址栏的&和符号是用来分隔参数,所以不能原样显示,否则可能会出现,就达不到参数值的正确性了
在这里插入图片描述

地址编码解码

地址编码

从上面基本信息我们可以知道,对地址编码主要是为了正确性和安全性,一般地址参数都是用问号后面的来标识,所以地址参数有问号就需要特殊处理。
这里需要注意的是,地址编码是指针对问号后面的参数进行编码,而不是全地址进行编号,否则就无法发起http请求了。

效果

  • 没有进行地址参数处理,就会出现下面全地址编码,这个是不对的
    在这里插入图片描述
  • 地址参数编码
    在这里插入图片描述

代码

string urlText = "https://so.csdn.net/so/search?spm=1001.2227.3001.4498&q=C# URL编码?和解码&&t=&u=";
string urlValue = urlText.Split('?')[0];
string urlParam = urlText.Split('?')[1];
string urlNew = $"{urlValue}?{System.Web.HttpUtility.UrlEncode(urlParam)}";
textBox2.Text = urlNew;

地址解码

在 C# 中,地址解码是将经过地址编码的字符串还原为原始字符串的过程。
常用的地址解码方法是 HttpUtility.UrlDecode,该方法在 System.Web 命名空间中定义。

效果

在这里插入图片描述

代码

string url = "https://so.csdn.net/so/search?spm%3d1001.2227.3001.4498%26q%3dC%23+URL%e7%bc%96%e7%a0%81";
string urlNew = System.Web.HttpUtility.UrlDecode(url);
textBox2.Text = urlNew;

疑问解答

如果在 C# 中不进行地址编码,可能会出现以下问题:

1.URI 格式错误
特殊字符(如空格、问号、等号等)在 URI 中有特定的含义,如果不经过编码直接使用,可能会导致 URI 格式错误,无法正确解析和处理。
2.安全问题
在构造包含用户输入的 URI 时,如果不对用户输入的特殊字符进行编码,可能会导致安全问题。例如,恶意用户可能通过在 URI 中插入恶意代码或注入攻击来获取未经授权的数据或执行非法操作。
3.数据丢失或错误
某些字符在 URI 中可能会被服务器或其他中间件解析或处理时误解。在进行传输或处理过程中,这些字符可能被修改或丢失,导致 URI 不符合预期。
4.兼容性问题
不同的服务器或客户端可能对特殊字符的处理方式有所不同。如果不进行地址编码,可能会导致不同环境下的兼容性问题,影响系统的通用性和可移植性。

总结:温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/293037.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

记一次使用mpvue开发微信小程序动画播放播放完成再播放下一个动画,实现动画队列的实战操作

微信小程序wxss支持Css的keyframes动画,我们想通过事件监听,在动画开始、动画播放阶段、动画播放结束的时候进行下一步动作。如下图,有一个从右飘入,然后从左侧出去的动画,我们希望的是,前一个出去后&#…

微众区块链观察节点的架构和原理 | 科普时间

践行区块链公共精神,实现更好的公众开放与监督!2023年12月,微众区块链观察节点正式面向公众开放接入功能。从开放日起,陆续有多个观察节点在各地运行,同步区块链数据,运行区块链浏览器观察检视数据&#xf…

STM32 内部 EEPROM 读写

STM32 的某些系列 MCU 自带 EEPROM。笔者使用的 STM32L151RET6 自带 16 KB 的 EEPROM,可以用来存储自定义的数据。在芯片选型时,自带 EEPROM 也可以作为一个考量点,省去了在外接 EEPROM 的烦恼。 下面简单介绍下 STM32 内部 EEPROM 的读写流…

区块链技术与应用 【全国职业院校技能大赛国赛题目解析】第一套区块链系统部署与运维

第一套区块链系统部署与运维题目 环境 : ubuntu20 fisco : 2.8.0 子任务1-2-1: 搭建区块链系统并验证 题意: 要求搭建一条四节点的区块链系统,我们选择使用fisco作为此次测试的链子 我们使用build_chain.sh进行构建单机四节点,并且使用官方的默认端口【正式比赛大概率不…

Python 操作 JMeter 探索:pymeter 实操指南

概要 JMeter 是一个流行的性能测试工具,用于测试 Web 应用程序的性能和负载。它通常与 GUI 一起使用,但如果您想在自动化测试中集成 JMeter,或者以编程方式创建和运行测试计划,那么 pymeter 库将是一个强大的工具。本文将介绍如何…

快速、准确地检测和分类病毒序列分析工具 ViralCC的介绍和详细使用方法, 附带应用脚本

介绍 viralcc是一个基因组病毒分析工具,可以用于快速、准确地检测和分类病毒序列。 github:dyxstat/ViralCC: ViralCC: leveraging metagenomic proximity-ligation to retrieve complete viral genomes (github.com) Instruction of reproducing resul…

大数据StarRocks(三) StarRocks数据表设计

1. 列式存储 1.1 列式存储方式有以下几个优点: 1.快速的数据查询 由于数据是按照列进行存储的,所以查询某个列时只需要读取该列所在的块,而不是整行数据,从而大大提高了查询效率。 2.压缩效率高 由于列式存储的数据块中只有一…

LLM Agent之再谈RAG的召回信息密度和质量

话接上文的召回多样性优化,多路索引的召回方案可以提供更多的潜在候选内容。但候选越多,如何对这些内容进行筛选和排序就变得更加重要。这一章我们唠唠召回的信息密度和质量。同样参考经典搜索和推荐框架,这一章对应排序重排环节,…

Flink实时电商数仓之旁路缓存

撤回流的处理 撤回流是指流式处理过程中,两表join过程中的数据是一条一条跑过来的,即原本可以join到一起的数据在刚开始可能并没有join上。 撤回流的格式: 解决方案 定时器:使用定时器定时10s(数据最大的时间差值&am…

【数据结构—二叉树的链式结构实现】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、二叉树的存储结构 二、二叉树链式结构的实现 2.1手动构建一课树 2.2二叉树的遍历 三、二叉树链式结构的实现 3.1前序遍历(递归) 3.2中序遍历(递归) 3.3后序…

如何成为ChatGPT 优质Prompt创作者

如何提问? 我想让你成为我的Prompt创作者。你的目标是帮助我创作最佳的Prompt,这个Prompt将由你ChatGPT使用。你将遵循 以下过程:1.首先,你会问我Prompt是关于什么?我会告诉你,但我们需要 通过不断的重复来…

LCR 176. 判断是否为平衡二叉树

解题思路: class Solution {public boolean isBalanced(TreeNode root) {return recur(root) ! -1;}private int recur(TreeNode root) {if (root null) return 0;int left recur(root.left);if(left -1) return -1;int right recur(root.right);if(right -1) …

使用通用MCU实现无人机飞行任务的快速二次开发

使用通用MCU实现无人机飞行任务的快速二次开发 ---TIDronePilot外部控制offboard模式介绍 无名小哥 2024年1月1日 传统飞控二次开发方法和主要存在的问题简介 通过对前面几讲中《零基础竞赛无人机积木式编程指南》系列开发教程的学习可知,在以往TI电赛真题的学习…

2023APMCM亚太数学建模C题 - 中国新能源汽车的发展趋势(2)

五.问题二模型建立和求解 5.1 问题二模型建立和求解 针对题目二,题目要求收集中国新能源电动汽车行业发展数据,建立数学模型描述,并预测未来十年的发展。由于在第一文中,我们已经收集了一定的新能源行业发展数据&…

Quartus II 13.1的安装及使用

Quartus II 13.1的安装及使用_quartus13.1-CSDN博客1.3 Verilog 环境搭建 | 菜鸟教程 学习 Verilog 做仿真时,可选择不同仿真环境。FPGA 开发环境有 Xilinx 公司的 ISE(目前已停止更新),VIVADO;因特尔公司的 Quartu…

【React系列】JSX核心语法和原理

本文来自#React系列教程:https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. ES6 的 class 虽然目前React开发模式中更加流行hooks,但是依然有很多的项目依然是使用类组件&#x…

imgaug库指南(三):从入门到精通的【图像增强】之旅

引言 在深度学习和计算机视觉的世界里,数据是模型训练的基石,其质量与数量直接影响着模型的性能。然而,获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此,数据增强技术应运而生,成为了解决这一问题的…

14.7-时序反馈移位寄存器建模

时序反馈移位寄存器建模 1,阻塞赋值实现的LFSR,实际上并不具有LFSR功能1.1.1,RTL设计,阻塞赋值1.1.2,tb测试代码1.1.3,波形仿真输出,SIM输出,没实现LFSR1.2.1,RTL设计&am…

【导出与导入Virtualbox虚拟机和启动连接openGauss数据库】

【导出与导入Virtualbox虚拟机和启动连接openGauss数据库】 一、导出虚拟机二、导入虚拟机三、启动数据库四、使用Data Studio连接数据库 一、导出虚拟机 选择关机状态的虚拟机 -> 管理菜单 -> 导出虚拟电脑 点击完成后,需要等待一小段时间,如…

神经网络的核心:帮助新手理解 PyTorch 非线性激活函数

目录 torch.nn子函数非线性激活详解 nn.Softmin Softmin 函数简介 函数工作原理 参数详解 使用技巧与注意事项 示例代码 nn.Softmax Softmax 函数简介 函数工作原理 参数详解 使用技巧与注意事项 示例代码 nn.Softmax2d Softmax2d 函数简介 函数工作原理 输入…