• 2024年1月8日

.Net WebApi枚举(Enum)类型字段返回值按键名返回

.Net WebApi的枚举类型字段返回时是按照值(int)返回,可以配置对该字段配置指定其返回键名(string),JsonConverter(typeof(StringEnumConverter))

详细内容

Furion设置AppStartup顺序导致Swagger文档404

一个刚创建的干净的Furion项目,其中WebApi项目依赖了个ApiBase的项目,两个项目均有Startup.cs文件 其中ApiBase的Startup.cs类如下: 而WebApi项目的Startup.cs文件 Program.cs就一句代码 调试运行本该显示出swagger文档,结果显示404,将[AppStartup(x)]特性删除,改成Startup:AppStartup后,正常显示swagger文档

详细内容

.net core中webapi发送和接受enum值自动转换enum类型

方法1:newtonjson Startup.cs设置: 模型定义时,给Enum字段加上特性,例如: 方法2:微软自带的System.Text.Json.Serialization; PS: 使用微软自带的Json时,日期格式转换会出错导致WebApi无法接收带有日期内容的对象,需要自行编写一个日期转换工具(下面部分代码转自https://blog.csdn.net/kukubashen/article/details/123798040) 然后Startup.cs中的注入修改为:

详细内容

Chrome浏览器调用WebApi无法获取Response的Header

一个Web客户端项目,通过js获取ajax返回的response内容的header,无法获取到相应的值。 这个问题是浏览器的安全机制导致,需要在webapi向response的header添加Access-Control-Expose-Headers内容。 例如:

详细内容

.Net 6的Winform注入及使用WebApiClientCore

1、依赖:Microsoft.Extensions.DependencyInjection; 2、program.cs 3、Form1.cs 上面完成Winform的注入, 4、IXXX.cs定义 上面为api接口的定义

详细内容

ocelot网关动态路由部分无效问题

使用.net 6开发webapi并用ocelot配合consul搭建了api网关,为了减少配置工作,启用了ocelot的动态路由功能,出现了部分注册的service自动识别,部分无法识别!经检查发现是service注册的时候没有设定端口。 设定后恢复正常

详细内容

Ocelot配置参数参考

LoadBalancer将决定负载均衡的算法 对请求进行限流可以防止下游服务器因为访问过载而崩溃,这个功能就是我们的张善友张队进添加进去的。非常优雅的实现,我们只需要在路由下加一些简单的配置即可以完成。 在 GlobalConfiguration下我们还可以进行以下配置 认证 如果我们需要对下游API进行认证以及鉴权服务的,则首先Ocelot 网关这里需要添加认证服务。这和我们给一个单独的API或者ASP.NET Core Mvc添加认证服务没有什么区别。 然后在ReRoutes的路由模板中的AuthenticationOptions进行配置,只需要我们的AuthenticationProviderKey一致即可。 JWT Tokens 要让网关支持JWT 的认证其实和让API支持JWT  Token的认证是一样的 Identity Server Bearer Tokens 添加Identity Server的认证也是一样 Allowed Scopes 这里的Scopes将从当前 token 中的 claims中来获取,我们的鉴权服务将依靠于它来实现 。当前路由的下游API需要某个权限时,我们需要在这里声明 。和oAuth2中的 scope意义一致。 鉴权 我们通过认证中的AllowedScopes 拿到claims之后,如果要进行权限的鉴别需要添加以下配置 当前请求上下文的token中所带的claims如果没有 name=”UserType” 并且 value=”registered” 的话将无法访问下游服务。 请求头转化 请求头转发分两种:转化之后传给下游和从下游接收转化之后传给客户端。在Ocelot的配置里面叫做Pre  Downstream Request和Post …

详细内容

ocelot传递客户端IP

使用ocelot搭建的api网关,服务需要获取客户端IP时可通过ocelot传递客户端IP 在Routes的项目添加 UpstreamHeaderTransform节点为传递header设定,除了RemoteIpAddress,还有如下:

详细内容

consul中.net 6服务被下线问题

使用.net6开发的服务总是被consul下线删除,排查后应该是.net webapi项目设定了服务停止自动注销注册(解决方案1)或者超过一定时间没被访问导致被释放,而再次健康检查时启动时间超过了consul的健康检查超时时间,同时deregisterCriticalServiceAfter的时间未能涵盖再次检查的时间(解决方案2)。 解决方案1: 检查Consul注册方法代码中是否包含了服务停止自动注销服务,例如之前代码中的: 如果包含如上代码,把它注释掉或者删除掉。 解决方案2(如果不存在方案1的问题): 1、心跳时间interval设定不要太大,例如5秒、10秒 2、超时时间timeout设定尽量大点,例如10秒、30秒、60秒,尤其是设定了较多的中间件、aop设定等启动需要较多时间的项目。 3、自动下线时间deregisterCriticalServiceAfter设定尽量大点,例如60秒、120秒,这个时间尽量是(interval + timeout) X 3(也就是最少能进行3次的健康检测)

详细内容