全部报错内容如下: 解决办法: 把自己程序生成的以deps.json结尾的文件也覆盖上 from:https://blog.csdn.net/wuxhyou/article/details/129184576
View Details返回json 首字母大写、时间格式、空值等问题 处理 在Startup 中 public void ConfigureServices(IServiceCollection services) 函数加入以下代码
1 2 3 4 5 6 7 8 9 10 11 |
services.AddControllers().AddNewtonsoftJson(options => { // 忽略循环引用 options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; // 不使用驼峰 options.SerializerSettings.ContractResolver = new DefaultContractResolver(); // 设置时间格式 options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; // 如字段为null值,该字段不会返回到前端 // options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; }); |
from:https://blog.csdn.net/oopxiajun2011/article/details/104874062/
View Details注意:Aop一定要设置在你操作语句之前,不然不会生效,还有必须是同一个SqlSuagrClient才会有效
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public async Task<dynamic> GetNoPagingList([FromQuery] YkzptSafecompanypromiseListQueryInput input) { //每次Sql执行前事件 _db.Aop.OnLogExecuting = (sql, data) => { var n1 = sql; }; var data = await _db.Queryable<YkzptSafecompanypromiseEntity>() .WhereIF(!string.IsNullOrEmpty(input.warehouseId), p => p.WarehouseId.Equals(input.warehouseId)) .Select(it => new YkzptSafecompanypromiseListOutput { id = it.Id, warehouseId = it.WarehouseId, promiseDate = it.PromiseDate, mainPerson = it.MainPerson, promiseContent = it.PromiseContent, companyStateInfor = it.CompanyStateInfor, }).MergeTable().OrderBy(sidx + " " + input.sort).ToListAsync(); return data; } |
全局
1 2 3 4 5 6 7 8 9 10 11 12 |
public DbContext() { Db = Instance; //调式代码 用来打印SQL Db.Aop.OnLogExecuting = (sql, pars) => { string s = sql; Console.WriteLine(sql + "\r\n" + Db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value))); Console.WriteLine(); }; } |
from:https://www.cnblogs.com/canfengfeixue/p/15649378.html
View Details一、问题描述
运行配置了权限内容的ASP.NET Core3.1 WebApi项目提示错误信息: Value cannot be null. (Parameter 'configure')
二、问题分析
根据错误信息提示,我们可以知道当前错误时由于’configure’参数的值为空引起的,又由于我们配置了权限内容,且我们的项目是.NET Core3.1项目,所以我们需要检查我们使用的权限包是否为.NET Core3.1的权限包。
三、解决办法
检查项目中权限用到的的nuget包【Microsoft.AspNetCore.Authorization】是否与项目版本匹配,如果不是与项目.NET Core3.1的版本一致,则先移除当前项目的权限nuget包,然后重新安装【Microsoft.AspNetCore.Authorization】3.1.9版本的Nuget权限包即可。
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。
View Details一、快速安装apollo 微服务配置中心 https://github.com/apolloconfig/apollo-build-scripts 下载 1.安装 jdk1.8+ 2.安装mysql 5.6.5+ 执行sql创建两个数据库 3.修改apollo配置连接 4.运行 使用bash打开(安装git后会带)
1 |
./demo.sh start |
访问 http://localhost:8070/ 登录 输入用户名apollo,密码admin 创建应用 新增配置 提交后 点击发布 二、asp.net core 连接apollo 1.添加引用
1 2 |
Microsoft.Extensions.Configuration Com.Ctrip.Framework.Apollo.Configuration |
2.创建webapi接口 Program.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Com.Ctrip.Framework.Apollo; using Microsoft.AspNetCore; namespace WebApi_Apollo { public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, builder) => { //默认的application Namespace builder.AddApollo(builder.Build().GetSection("apollo")).AddDefault(); }) .UseStartup<Startup>(); } } |
Controller.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[ApiController] [Route("[controller]")] public class ValuesController:ControllerBase { IConfiguration _configuration; public ValuesController(IConfiguration configuration) { _configuration = configuration; } [HttpGet] public string test() { var v = _configuration.GetValue<string>("time"); return v; } } |
appsettings.json 多添加一项
1 2 3 4 |
"apollo": { "AppId": "MES1", //这是我们上面添加的Apollo里面的Appid "MetaServer": "http://127.0.0.1:8080" //Apollo配置服务器地址,注意这里是8080,不是admin的8070 } |
二、集群搭建 1 下载 https://github.com/apolloconfig/apollo/releases apollo-portal:Web界面 端口8070 apollo-adminservice:提供配置管理接口,提供配置修改、发布等接口,接口服务对象为Portal,以及Eureka 端口 8090 apollo-configservice:提供配置获取接口,提供配置更新推送接口,接口服务对象为Apollo客户端 端口 8080 2 创建数据库 需要创建两个数据库 ApolloPortalDB和ApolloConfigDB https://github.com/apolloconfig/apollo/tree/master/scripts/sql ApolloPortalDB只需要在生产环境部署一个即可,而ApolloConfigDB需要在每个环境部署一套(如:生产一套,测试一套) ApolloPortalDB View Code ApolloConfigDB View Code 3 配置 apollo-configservice和apollo-adminservice
1 2 3 |
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloConfigDB?useSSL=false&characterEncoding=utf8 spring.datasource.username = someuser spring.datasource.password = somepwd |
apollo-portal
1 2 3 |
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloPortalDB?useSSL=false&characterEncoding=utf8 spring.datasource.username = someuser spring.datasource.password = somepwd |
4.安装git才能在windows上运行 .sh脚本
1 2 3 |
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloPortalDB?useSSL=false&characterEncoding=utf8 spring.datasource.username = someuser spring.datasource.password = somepwd |
5
1 2 3 |
set global time_zone = '+8:00'; ##修改mysql全局时区为北京时间,即我们所在的东8区 set time_zone = '+8:00'; ##修改当前会话时区 flush privileges; #立即生效 |
启动apollo-configservice-1.9.2-github
1 |
java -Xms256m -Xmx256m -Dspring.datasource.url=jdbc:mysql://l92.xxx.xxx.xxx:3306/ApolloConfigDB?characterEncoding=utf8 -Dspring.datasource.username=xxx -Dspring.datasource.password=xxx -Dsever.port=8080 -jar apollo-configservice-1.9.2.jar |
启动apollo-adminservice-1.9.2-github
1 |
java -Xms256m -Xmx256m -Dspring.datasource.url=jdbc:mysql://192.xxx:3306/ApolloConfigDB?characterEncoding=utf8 -Dspring.datasource.username=xxx -Dspring.datasource.password=xxx -Dsever.port=8090 -jar apollo-adminservice-1.9.2.jar |
启动apollo-portal-1.9.2-github
1 |
java -Xms256m -Xmx256m -Dspring.datasource.url=jdbc:mysql://192.xxx:3306/ApolloPortalDB?characterEncoding=utf8 -Dspring.datasource.username=xxx -Dspring.datasource.password=xxx -Dsever.port=8070 -jar apollo-portal-1.9.2.jar |
访问 http://127.0.0.1:8070/ from:https://www.cnblogs.com/buchizaodian/p/15474559.html
View Details在特殊的情况下查询过滤视图 会出现重复的数据结果集(返回的多条数据结果一致)。 原因是啥:主键 在数据库设计的理念中:每个表都应该的唯一的主键。但视图不同,EF中会自动按视图的最前几个非空型字段设置为主键。 如果在某些特殊的查询情况下。前几列数据一致时,EF就会返回重复数据。 解决方案: 1. 在使用的视图后 加入 AsNoTracking 阻止EF缓存数据集。(EF会依据主键建立数据缓存,实现后续的级联操作)。 2. 修改视图列顺序,将能区分内容的列放入最前列中,并保证为非空类型。 建议使用第二方案。 from:https://www.cnblogs.com/shikyoh/p/8794541.html
View Details在NetCore时代开发WebService和FrameWork时代差别有一点儿大,毕竟NetCore是跨平台的一个框架,不过使用起来也得很简单,下面我就使用Visual Studio2019开发一个示例服务程序。你依然要注意我这个我写的这个demo是soap1.2。在开发前你必须清楚这一点,因为有很多时候SOAP1.1和SOAP1.2 并不通用。至于soap1.1我暂时不用netcore写示例了。 下面是开发详细过程: (1)创建新项目,选择ASP.NET Core Web应用程序 ,如下图 (2)配置新项目,为自己的项目起个名字,然后点击下一步,如下图 (3)进入模板选择页面,选择空,如下图 (4)项目建立好后需要我们通过NuGet引用开发依赖包 SoapCore,如下图一样添加引用。 (5)这时我们新一个类用于示例的返回和接受参数,类名StudentModel 代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
[DataContract] public class StudentModel { /// <summary> /// 学号 /// </summary> [DataMember] public string Sno { get; set; } /// <summary> /// 姓名 /// </summary> [DataMember] public string Name { get; set; } /// <summary> /// 班级 /// </summary> [DataMember] public string Grade { get; set; } /// <summary> /// 生日 /// </summary> [DataMember] public DateTime Birthday { get; set; } } |
(6)添加接口约束IContract,我们和framework下保持一致,实现两个方法,Get和Add代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[ServiceContract] public interface IContract { /// <summary> /// 查询学生信息 /// </summary> /// <param name="sno">学号</param> /// <returns>学生信息</returns> [OperationContract] StudentModel Get(string sno); /// <summary> /// 添加学生信息 /// </summary> /// <param name="student">学生信息</param> /// <returns>result</returns> [OperationContract] int Add(StudentModel student); } |
(7)添加服务实现类StudentService,来实现我们的约定服务接口。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class StudentService : IContract { public StudentModel Get(string sno) { return new StudentModel() { Sno = sno, Name = "小红", Grade = "202002", Birthday = new DateTime(2012, 8, 15) }; } /// <summary> /// 添加学生信息 /// </summary> /// <param name="student"></param> /// <returns></returns> public int Add(StudentModel student) { return 1; } } |
(8)在netcore中添加注入,这个想必不会陌生吧,现在netcore的注入已经很普遍了,修改 Startup.cs类中的ConfigureServices方法,添加代码如下:
1 |
services.TryAddSingleton<IContract, StudentService>(); |
(9)添加服务发布接口地址,修改Startup.cs类中的Configure方法,在最后修改UseEndpoints这一部分代码如下:
1 2 3 4 5 6 7 8 9 10 11 |
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseRouting(); app.UseSoapEndpoint<IContract>("/StudentService.asmx", new BasicHttpBinding(), SoapSerializer.XmlSerializer); } |
(10)点击Visual Studio2019上的运行按钮,此时便可以在浏览器里预览了。直接运行看到的页面是错误的地址,需要手动改一下地址如下:https://localhost:44376/StudentService.asmx,添加后半部分StudentService.asmx。我们便可以看到正常的返回了,如下图: 至此我们已经完成了一个简单的WebService,这个服务实现两个接口,一个Get 一个Add方法。 可以下载我示例源码百度网盘链接:https://pan.baidu.com/s/1wCXaGyThXTuS04aupJFsbg 查看提取码请先点击下方的捐赠按钮。 原创作品 相关文章:C# net framework 开发WebService(Soap) from:https://lebang2020.cn/details/210110njneqn2f.html
View Details关于C# webservices 返回的soap节点标签会包含方法名+result的修改 有时候做项目的时候需要用到webservices与其他系统进行交互,但是当使用asp.net开发webservice的时候,webservices返回数据的xml节点标签会默认带 方法名+result 如下图: 这样的返回方式不利于客户端进行解析 我们可以在方法头添加属性: 这样返回的数据就会变化 from:https://blog.csdn.net/qq_40099189/article/details/107120068
View Details