网站里的动画效果,做vlogger的网站有哪些,网站没服务器行吗,有做门窗找活的网站吗欢迎来到《小5讲堂》#xff0c;大家好#xff0c;我是全栈小5。 这是2024年第3篇文章#xff0c;此篇文章是C#知识点实践序列文章#xff0c;博主能力有限#xff0c;理解水平有限#xff0c;若有不对之处望指正#xff01; 目录 前言数据丢失效果请求端代码接口端代码… 欢迎来到《小5讲堂》大家好我是全栈小5。 这是2024年第3篇文章此篇文章是C#知识点实践序列文章博主能力有限理解水平有限若有不对之处望指正 目录 前言数据丢失效果请求端代码接口端代码 数据编码效果请求端代码接口端代码 防止攻击 前言
上篇文章我们已经了解到如果不进行地址编码会存在数据丢失或者数据不正确的情况。 至于URL错误和安全问题以及兼容性问题暂不做探索这里只通过不编码解析情况探索。
数据丢失
这个比较好理解就是传递过去的地址参数值不全只有部分另一部分数据丢失的情况。 下面将演示A地方发起http地址的get请求传递未编码的地址参数在目标接口接收到参数值的效果
效果 假设地址参数为name张三小明age2021 完整请求地址为https://localhost:7250/WeatherForecast?name张三小明age2021 地址参数中的与符号是用来分隔不同参数变量等于符号后面是参数值。
从上图可以看到name参数的值应该是张三小明age参数的值应该是2021实际上获取到的值是name张三age20。 原因就是地址参数的值就是从等于号到下一个符号结束没有符号就是等于符号后面所有值。 因此如果网址地址参数在通过http请求方式调用接口不进行编码就很有可能会丢失数据。 请求端代码
private async Task HttpGet()
{string urlValue $https://localhost:7250/WeatherForecast?name张三小明age2021;using (HttpClient client new HttpClient()){try{HttpResponseMessage response await client.GetAsync(urlValue);response.EnsureSuccessStatusCode(); // 确保请求成功否则会抛出异常string responseBody await response.Content.ReadAsStringAsync();Console.WriteLine(responseBody);}catch (HttpRequestException ex){Console.WriteLine($请求失败{ex.Message});}}
}接口端代码
[HttpGet(Name GetWeatherForecast)]
public IEnumerableWeatherForecast Get(string name, int age)
{string urlParam Request.QueryString.Value;return Enumerable.Range(1, 5).Select(index new WeatherForecast{Date DateTime.Now.AddDays(index),TemperatureC Random.Shared.Next(-20, 55),Summary Summaries[Random.Shared.Next(Summaries.Length)]}).ToArray();
}数据编码
使用HttpUtility.UrlEncode进行数据编码
效果
从下图可以知道.net core mvc框架本身会自动对编码数据进行解码
请求端代码
编码后数据编码后发现无法调用到接口那是因为接口age参数接收的是整型数据因为框架有自己规则所以需要改为字符串类型 https://localhost:7250/WeatherForecast?name%e5%bc%a0%e4%b8%89%26%e5%b0%8f%e6%98%8eage20%2621 private async Task HttpGet()
{string urlValue $https://localhost:7250/WeatherForecast?name{HttpUtility.UrlEncode(张三小明)}{HttpUtility.UrlEncode(age2021)};using (HttpClient client new HttpClient()){try{HttpResponseMessage response await client.GetAsync(urlValue);response.EnsureSuccessStatusCode(); // 确保请求成功否则会抛出异常string responseBody await response.Content.ReadAsStringAsync();Console.WriteLine(responseBody);}catch (HttpRequestException ex){Console.WriteLine($请求失败{ex.Message});}}
}接口端代码
[HttpGet(Name GetWeatherForecast)]
public IEnumerableWeatherForecast Get(string name, string age)
{string urlParam Request.QueryString.Value;return Enumerable.Range(1, 5).Select(index new WeatherForecast{Date DateTime.Now.AddDays(index),TemperatureC Random.Shared.Next(-20, 55),Summary Summaries[Random.Shared.Next(Summaries.Length)]}).ToArray();
}防止攻击
地址参数发起是在攻击者他可以进行不编码传递这个怎么防止攻击可以采用以下措施。
1.进行输入检查和过滤 在服务端对传递的地址参数进行检查和过滤以确保它们符合预期格式、类型、范围和规则。例如可以检查参数是否是合法的URL或者做一定的输入数据格式的限制。
2.对地址参数进行编码 对地址参数进行URL编码或其他适合的编码以确保传递的数据是安全的且不会被攻击者利用。
3.使用HTTPS协议进行数据传输 使用HTTPS协议加密数据传输可以通过传输层或者网络层的加密来确保连接的安全性可以有效防止数据的中途被中间人攻击窃取提高防护能力。
4.避免在URL中传递敏感数据 避免在地址参数中传递敏感的数据比较敏感的数据最好在进行传递时是采用POST方式进行不要采用GET的方式。 总结温故而知新不同阶段重温知识点会有不一样的认识和理解博主将巩固一遍知识点并以实践方式和大家分享若能有所帮助和收获这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。