• 2023年1月4日

.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中的注入修改为:

详细内容

js对象深度复制(不是引用)

面向对象开发中,对象(object)的直接赋值都是引用而已,新对象值发生变化原对象也会出现相应的变化。 例如: 但是有些时候开发并不希望出现这类问题,因此就需要复制而不是赋值而已。我们可以通过json的转换来实现复制。

详细内容

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网关启用动态路由

为了简化ocelot网关路由配置,可以考虑使用动态路由模式。下面是相关的英文介绍: This feature was requested in issue 340. The idea is to enable dynamic routing when using a service discovery provider (see that section of the docs for more info). In this mode Ocelot will use the first segment of the upstream path to lookup the downstream service with the service discovery provider. An example of this would be calling Ocelot with a url like https://api.mywebsite.com/product/products. Ocelot will take the first segment of the path which is product and use it as a key to look up the service in Consul. If Consul returns a service Ocelot will request it on whatever host and port comes back from Consul plus the remaining path segments in this case products thus making the downstream call http://hostfromconsul:portfromconsul/products. …

详细内容

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次的健康检测)

详细内容