当前位置: 首页 > news >正文

【wpf】07 后端验证及令牌码获取步骤

在这里插入图片描述
在这里插入图片描述

由于在用wpf开发应用程序时,从后端获取数据需要用到 Authorization 授权的Bearer令牌,而这个令牌的获取需要登录后台进行获取,这里登录时还涉及到的验证码的操作,所以在获取过程中,需要对后台系统进行登录并拿到这个Bearer令牌。

1 登录

正确的登录方式,一般包括用户名、密码和验证码,其中验证码是随机生成的,而且显示的是图片,当前测试使用到的是后端转成base64格式的字符串传过来,然后再在前端显示,这样一个过程。

1.1 验证码获取

直接打开对应的url地址进行code获取,定义异步任务,返回获取到的内容。

public async Task<string> GetCodeAsync<T>()
{HttpResponseMessage response = await httpClient.GetAsync("Your url");if (response.IsSuccessStatusCode){string content = await response.Content.ReadAsStringAsync();return content;}throw new Exception($"Error getting data from API: {response.StatusCode}");
}

一般Get到的数据是Json格式,这里拿到数据之后需要用Json转换一下,来拿到我们需要的数据

HttpsMessages httpMessage = new HttpsMessages();
var result = await httpMessage.GetCodeAsync<HttpsMessages.MyResponseType>();JObject jObject = JObject.Parse(result);
JToken img = jObject["img"];
JToken uuid = jObject["uuid"];
strImg = img.ToString();
struuid = uuid.ToString();

1.2 Base64转图片显示

在WPF(Windows Presentation Foundation)中显示Base64编码的图片,你可以使用Image控件并将图片的Base64字符串转换为BitmapImage。以下是一个完整的示例代码,展示了如何实现这一功能。

步骤一: 在XAML中添加Image控件

首先,在你的项目中添加一个Image控件,用于显示图片

<Image x:Name="Base64Image" Grid.Column="1" Stretch="Uniform" HorizontalAlignment="Left" VerticalAlignment="Top" Width="150" Height="50" Margin="450,340,0,0"/>

步骤二:在后台代码中加载Base64图片

在窗口加载时(例如在Window_Loaded事件处理程序中)将Base64字符串转换为BitmapImage并赋值给Image控件的Source属性。
示例代码(这里拿到的数据是从后端Get到后通过Json解析后的数据):

// 将Base64字符串转换为字节数组  
byte[] imageBytes = Convert.FromBase64String(strImg);// 使用字节数组创建BitmapImage  
BitmapImage bitmapImage = new BitmapImage();
using (var ms = new System.IO.MemoryStream(imageBytes))
{bitmapImage.BeginInit();bitmapImage.CacheOption = BitmapCacheOption.OnLoad;bitmapImage.StreamSource = ms;bitmapImage.EndInit();bitmapImage.Freeze(); // 使BitmapImage只读,以便可以在多个线程之间共享  
}// 将BitmapImage设置为Image控件的Source  
Base64Image.Source = bitmapImage;

注意事项:

  1. Base64字符串格式:确保你的Base64字符串是正确的,并且如果包含MIME类型前缀(如data:image/png;base64,),你需要将其移除。
  2. 线程安全:在WPF中,某些UI元素(如BitmapImage)需要在UI线程上进行操作。上面的代码示例已经处理了这一点,通过Freeze()方法使BitmapImage成为只读对象,从而可以在多个线程之间共享。
    通过上述步骤,就可以在WPF应用程序中成功显示Base64编码的图片。

1.3 验证并获取Bearer令牌码

以上的操作只是从后端拿到了验证码部分,接下来我们需要输入账号、密码和验证码发送给后端进行验证,进而拿到我们需要的Bearer令牌码,这里需要发送四个值,分别是验证码、用户名、密码和uuid。
示例代码:

 HttpsMessages httpMessage = new HttpsMessages();if (null != txtBoxCode.Text){string strCode = txtBoxCode.Text;var result = await httpMessage.GetBearerTokenAsync<HttpsMessages.MyResponseType>(strCode, strUserName, strPassword, struuid);MessageBox.Show($"令牌为:{result}");
}public async Task<string> GetBearerTokenAsync<T>(string code ,string userame,string password,string uuid)
{// 构造JSON格式的登录请求体  var json = new StringContent( $"{{\"code\": \"{code}\",\"username\": \"{userame}\", \"password\": \"{password}\", \"uuid\": \"{uuid}\"}}",  Encoding.UTF8, "application/json");// 发送POST请求并等待响应HttpResponseMessage response = await httpClient.PostAsync("Your url", json);// 确保响应成功  response.EnsureSuccessStatusCode();// 读取响应内容string responseBody = await response.Content.ReadAsStringAsync();JObject jObject = JObject.Parse(responseBody);string retCode = jObject["code"].ToString();if(retCode == "500"){return null;}else if(retCode == "200"){bearerToken = jObject["data"]["access_token"].ToString();// 授权httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);return bearerToken;}throw new Exception($"Error getting data from API: {response.StatusCode}");
}

拿到令牌后,将其赋值给全局变量,在进行后面的数据获取时,将这个令牌进行授权即可实现。

2 数据获取

在执行异步获取数据时,将授权执行一次即可。
示例代码:

 public async Task<string> GetAsync<T>(string path,string bearerToken){httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);HttpResponseMessage response = await httpClient.GetAsync("Your url");if (response.IsSuccessStatusCode){string content = await response.Content.ReadAsStringAsync();return content;}throw new Exception($"Error getting data from API: {response.StatusCode}");}

相关文章:

【wpf】07 后端验证及令牌码获取步骤

由于在用wpf开发应用程序时&#xff0c;从后端获取数据需要用到 Authorization 授权的Bearer令牌&#xff0c;而这个令牌的获取需要登录后台进行获取&#xff0c;这里登录时还涉及到的验证码的操作&#xff0c;所以在获取过程中&#xff0c;需要对后台系统进行登录并拿到这个Be…...

学习中,师傅b站泷羽sec——xss挖掘过程

某职业技术学院网站xss挖掘&#xff1a; 资产归纳 例如&#xff1a;先把功能点都看一遍&#xff0c;大部分都是文章 根据信息搜集第一课学习到一般主站的防御力是比较强的&#xff0c;出现漏洞的点不是对新手不友好。 在资产验证过程中还是把主站看了一遍 没有发现有攻击的机会…...

什么是双因素身份验证?双因素身份验证的凭据类型有哪些?

w微服务在数字化的时代&#xff0c;保护个人和企业的敏感信息至关重要。双因素身份验证&#xff08;Two-Factor Authentication&#xff0c;简称 2FA&#xff09;作为一种增强安全性的方法&#xff0c;越来越受到广泛关注。那么&#xff0c;什么是双因素身份验证呢&#xff1f;…...

【MR开发】在Pico设备上接入MRTK3(一)——在Unity工程中导入MRTK3依赖

写在前面的话 在Pico上接入MRTK3&#xff0c;目前已有大佬开源。 https://github.com/Phantomxm2021/PicoMRTK3 也有值得推荐的文章。 MRTK3在PICO4上的使用小结 但由于在MacOS上使用MRTK3&#xff0c;无法通过Mixed Reality Feature Tool工具管理MRTK3安装包。 故记录一下…...

利用移动式三维扫描技术创建考古文物的彩色纹理网格【上海沪敖3D】

文章来源于蔡司工业质量解决方案&#xff0c;作者蔡司工业质量 在考古环境中&#xff0c;三维扫描技术应用广泛&#xff0c;如存档、保存、复制和分享&#xff08;包括实体和虚拟形式&#xff09;。 文中&#xff0c;通过真实的扫描案例&#xff0c;您将了解到三维光学解决方案…...

Spring AI Java程序员的AI之Spring AI(四)

Spring AI之Java经典面试题智能小助手 前言一、准备面试题二、搭建工程三、文件读取与解析四、Markdown文件解析五、问题搜索六、自定义EmbeddingClient七、定义请求Controller 前言 通过Ollama在本地部署了Llama3大模型&#xff0c;这篇来基于Llama3和Spring AI&#xff0c;以…...

精选20个爆火的Python实战项目(含源码),直接拿走不谢!

今天给大家介绍20个非常实用的Python项目&#xff0c;帮助大家更好的学习Python。 完整版Python项目源码&#xff0c;【点击这里】领取&#xff01; ① 猜字游戏 import random def guess_word_game(): words ["apple", "banana", "cherry&quo…...

Rocky Linux 9安装Asterisk 20和freepbx 17脚本——筑梦之路

脚本搜集来自Rocky Linux 9安装Asterisk 20和freepbx 17脚本 #!/bin/bash#Preparacion de ambiente de RockyLinuxecho "Deshabilitar SELINUX /etc/selinux/config "sed -i s/^SELINUX.*$/SELINUXdisabled/ /etc/selinux/configecho "Establecer nombre de maq…...

PSPICE FOR TI笔记记录1

快捷放置器件 R旋转 连线 w,单击器件引脚方块部分 电压探测笔 创建仿真文件 Analysis Type 分析模式&#xff1a;比如时域分析&#xff0c;频域分析 Run To Time 仿真时长 Skip intial transient bias point calculation (跳过初始瞬态偏置点计算(SKIPBP))一定要勾选 编辑…...

Java集合剖析4】LinkedList

目录 一、LinkedList的特有方法 二、LinkedList的底层数据结构 三、插入方法的具体实现 一、LinkedList的特有方法 LinkedList的底层是双向链表&#xff0c;它提供了操作首尾结点的方法 二、LinkedList的底层数据结构 LinkedList的底层是一个双向链表&#xff0c;有一个结点内部…...

基于MATLAB/octave的容积卡尔曼滤波(CKF)【带逐行注释】

介绍 CKF的三维滤波程序例程 产品概述 我们的 MATLAB 数据处理工具是专为科研人员、工程师和数据分析师设计的高效解决方案。该工具提供了一系列强大的功能&#xff0c;能够快速处理和分析大规模数据集&#xff0c;适用于各种科学和工程应用&#xff0c;包括信号处理、图像分…...

Python编程探索:从基础语法到循环结构实践(下)

文章目录 前言&#x1f377;四、 字符串拼接&#xff1a;连接多个字符串&#x1f378;4.1 使用 操作符进行字符串拼接&#x1f378;4.2 使用 join() 方法进行字符串拼接&#x1f378;4.3 使用 format() 方法进行格式化拼接&#x1f378;4.4 使用 f-string&#xff08;格式化字…...

简介openwrt系统下/etc/config/network文件生成过程

openwrt的network文件&#xff0c;或者说在/etc/config下的文件&#xff0c;都是动态生成的。 脚本的函数定义在package/base-files/files/lib/functions中&#xff0c;有以下几个文件&#xff1a; libraSVN:~/Wang_SP4/openwrt-d03dc49/package/base-files/files/lib/functi…...

javaWeb项目-Springboot+vue-XX图书馆管理系统功能介绍

本项目源码&#xff08;点击下方链接下载&#xff09;&#xff1a;java-springbootvue阿博图书馆管理系统源码(项目源码-说明文档)资源-CSDN文库 项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&…...

华为ENSP用户权限深度解析:构建安全高效的网络管理

在华为ENSP&#xff08;Enterprise Network Simulation Platform&#xff09;用户界面中&#xff0c;用户权限级别是一个重要的概念&#xff0c;它用于限制不同用户访问设备的权限&#xff0c;从而增加设备管理的安全性。以下是对华为ENSP用户界面用户权限级别的详细解释&#…...

NFC之NDEF

NDEF的通用格式 MB标志是一个1位字段&#xff0c;当其被设置时&#xff0c;表示NDEF消息的开始。 ME标志是一个1位字段&#xff0c;当其被设置时&#xff0c;表示NDEF消息的结束。 CF标志是一个1位字段&#xff0c;指示这是分块有效载荷的第一个记录块或中间记录块。 SR标志是…...

学习第三十六行

QValidator::State里面state为0&#xff0c;完全不匹配&#xff0c;1&#xff0c;部分匹配&#xff0c;2&#xff0c;完全匹配,对于label或者textedit里面的字符均为QString类型&#xff0c;特别是遇到数字&#xff0c;需要QString::number转化&#xff0c;对于正则表达式&…...

停车场问题

实验内容 1.问题描述&#xff1a; 设停车场是一个可停放n辆汽车的狭长通道&#xff0c;且只有一个大门可供汽车进出。汽车在停车场内按车辆达到时间的先后顺序&#xff0c;依次由北向南排列(大门在最南端&#xff0c;最先达到的第一辆车停放在车场的最北端)&#xff0c;若车场…...

海康相 机

海康机器人-机器视觉-下载中心 海康威视MVS客户端及虚拟相机c开发案例-CSDN博客 相机驱动下载&#xff1a; 下载中心 VisionMaster 视频教程_哔哩哔哩_bilibili 【VisionMaster】试用版安装说明_visionmaster试用版-CSDN博客 海康视觉算法平台VisionMaster 4.3.0 C# 二次…...

用map实现el-table全选

<el-button size"small" type"primary" click"searchProxy">查询</el-button><el-checkbox v-model"selectAll" change"changeSelectAll" >全选</el-checkbox><el-table:data"taskList&…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...