这次使用一个舒服的姿势插入HttpClient拦截器技能点

应用开发2025-11-04 20:05:37878

本文转载自微信公众号「精益码农」,次使作者有态度的舒服势插马甲。转载本文请联系精益码农公众号。姿点

axios是截器技一个基于 promise 的网络请求库,可以用于浏览器和 node.js;promise 类似于C#的次使Task async/await机制,以同步的舒服势插代码风格编写异步代码;

而axios拦截器就类似于 C# HttpClient自定义message Handler, 给你一个请求/响应在被handler之前做一些自定义动作的机会。

C#请求/响应拦截器

axios请求/响应拦截器的姿点定位就类似于 C# HttpClient的自定义message handler。

.NET默认的截器技message handler是HttpClientHandler,开发者可以插入自定义的次使message handler。

用途举例 ① 插入日志 ② 插入自定义Header

(1) 更具体的舒服势插就是System.Net.Http.DelegatingHandler类,香港云服务器开发者重写SendAsync方法,姿点可以拦截请求/响应,截器技 注入动作。

protected override Task<HttpResponseMessage> SendAsync(      HttpRequestMessage request,次使 System.Threading.CancellationToken cancellationToken) } 

自定义message handler形成的是pipeline, 肉眼可猜测使用的舒服势插是责任链模式。

(2) 添加自定义message handler

使用HttpCLientFactory.Create方法:

HttpClient client = HttpClientFactory.Create(new MessageHandler1(),姿点 new MessageHandler2()); 

自定义message handler的执行顺序,是传入Create方法的顺序,也就是说,上面最后一个handler是最先接触到响应的。

------以上是.NET Framework插入拦截器的用法-------

推及到.NET Core, 因为大量应用了提前配置&&依赖注入,b2b信息网实际由IHttpClientFactory来注入HttpClient。

提前配置HttpClient拦截器的代码如下:

services.AddHttpClient("bce-request", x =>                    x.BaseAddress = new Uri(Configuration.GetSection("BCE").GetValue<string>("BaseUrl")))                 .ConfigureHttpMessageHandlerBuilder(_=> new LoggerMessageHandler{...} )                    .ConfigurePrimaryHttpMessageHandler(_ => new BceAuthClientHandler{...}) 

更多有关.NET Core IHttpClientFactory的内幕请点这里。

axios 拦截器

axios一般发起的是ajax请求,我们一般会封装处理一些通用的请求/响应动作。

码甲哥就遇到:

(1) 在每次ajax跨域请求时,允许携带第三方凭据(cookie、authorization)

(2) 封装4xx响应码的处理逻辑

其中就要用到axios的拦截器:

export interface AxiosInterceptorManager<V> {   use<T = V>(onFulfilled?: (value: V) => T | Promise<T>, onRejected?: (error: any) => any): number;   eject(id: number): void; } 

仔细围观usesdk,支持传入两个函数,

表示请求(响应)一旦准备好了/失败了,你可以注入的动作。

精简代码如下:

import axios from axios; import {     message   } from antd const service = axios.create({     baseURL: process.env.REACT_APP_APIBASEURL,      timeout: 5000 }) // 添加请求拦截器 service.interceptors.request.use((reqconfig) => {     reqconfig.withCredentials = true;     return reqconfig; }, (error) => {     return Promise.reject(error); }); // 添加响应拦截器 service.interceptors.response.use((response) => {     return response; }, (error) => {     if (error.response && error.response.status === 401) {         message.error("无权限操作,请联系tvs运维.")     }     return Promise.reject(error); }); 

以上对于前端老鸟不值一提,但是上述拦截动作对于把握全栈web开发必不可少。云服务器提供商

本文另作为前端快闪四:如何拦截axios请求/响应?

本文地址:http://www.bzve.cn/html/404d65598940.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

电脑扬声器没有声音的设置方法(解决电脑扬声器无声的问题,让音频正常播放)

夏普电视机的质量如何?(以夏普电视机为例,探讨其质量表现及用户反馈)

苹果刷机的风险与收益(解析苹果刷机的利弊以及应对措施)

佳能G7X的品质与特点(为您呈现完美的拍摄体验)

解决戴尔电脑登录界面错误的方法(排查戴尔电脑登录界面错误的常见问题及解决方案)

深入了解vivo刷机模式及使用方法(探索vivo刷机模式的功能和操作技巧)

五菱宏光S——平民之选的领头羊(年轻、实用、经济——宏光S给你带来全方位驾驶体验)

urbeast耳机(挑战耳朵的极限,音乐的新高度)

友情链接

滇ICP备2023006006号-39