7.1K Star 12.7K Fork 4.1K

GVPdotNET China/Furion

 / 详情

关于远程请求的请求拦截问题

已完成
创建于  
2022-08-02 17:37

💢 特别说明:如果 Issue 没有严格按照模板编写且未提供测试源码下载或 Git 测试仓库地址,则视为无效 Issue

Furion 版本号

哪个版本号?
4.1.7

Web 项目类型

  • WebApi
  • Mvc
  • Razor Pages
  • Blazor Server
  • MinApp

描述你的问题

发生了什么?
通过IHttpDispatchProxy代理方式封装微信接口时,基类接口中的请求拦截不生效,在派生接口的请求拦截有日志输出。代码如图

基类
派生类
日志输出

异常堆栈信息

异常堆栈是什么?

无异常

测试项目代码

⚠⚠ 必须提供完整可运行且包含错误的 Git 仓库 DEMO,DEMO 提供最简单的错误逻辑代码,否则不予处理。⚠⚠

您的代码下载地址?

https://gitee.com/xiodra/wechat-sdk-furion-issue.git

数据库信息

  • Sqlite
  • SqlServer
  • Mysql
  • Oracle
  • PGSql
  • Firebird
  • Cosmos

期待结果

期待的结果是?
期待通过IHttpDispatchProxy代理方式封装微信接口时,在基类能够实现请求拦截,后期可以派生出实现自动添加AccessToken参数的IApiWithAccessTokenFilter接口,方便封装

评论 (6)

Xiodra 创建了任务

从 C# 语法层面,静态接口方法是没有 “继承” 的概念,所以上面的代码符合预期:

输入图片说明

但从实际项目开发看,你的代码是合理的,所以我看看如何实现你的需求。

我之前这个微信接口封装是使用WebApiClientCore这个库来完成的,它里面是通过特性实现的
代码
看我们这个框架能否参考完善实现我的这个需求,谢谢大佬

代码实现

2fdd5c2

输入图片说明

测试代码

using Furion.RemoteRequest;

namespace Furion.Application;

public interface IHttp : IBase
{
    [Post("https://localhost:44316/api/test-module/upload-file", ContentType = "multipart/form-data")]
    Task<HttpResponseMessage> TestSingleFileProxyAsync([BodyBytes("file", "image.png")] Byte[] bytes);

    [Post("https://localhost:44316/api/test-module/upload-muliti-file", ContentType = "multipart/form-data")]
    Task<HttpResponseMessage> TestMultiFileProxyAsync([BodyBytes("files", "image.png")] Byte[] bytes, [BodyBytes("files", "image2.png")] Byte[] bytes2);

}

public interface IBase : IHttpDispatchProxy
{
    [Furion.RemoteRequest.Interceptor(InterceptorTypes.Request)]
    static void OnRequest(HttpRequestMessage req)
    {
    }
}

测试结果

输入图片说明

发布版本

将在 v4.1.8 版本发布(今晚)

谢谢大佬

v4.1.8 版本已发布。

收到,谢谢大佬

百小僧 任务状态待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
974299 monksoul 1578937227 1454273 xiodra 1578951882
C#
1
https://gitee.com/dotnetchina/Furion.git
git@gitee.com:dotnetchina/Furion.git
dotnetchina
Furion
Furion

搜索帮助