ASP.NET Core中如何配置Kestrel Urls呢,大家可能都知道使用UseUrls() 方法来配置。
今天给介绍全面的ASP.NET Core 配置 Urls,使用多种方式配置Urls。 让你了解ASP.NET Core Kestrel 的地址设置。 下面我们就来了解如何配置。我将介绍4种方式来配置Urls。 1、UseUrls方法 大家最熟悉的一种也就是使用UseUrls 。下面我们就来实际使用。 UseUrls 方法可以使用多个地址,也可以使用一个地址。 单个网址 UseUrls("http://localhost:5001") 多个网址 UseUrls("http://localhost:5001", "http://localhost:5002", "http://*:5003") //多个地址 *代表绑定所有本机地址 可以局域网访问,拥有外网ip 就可以外网访问 2、配置文件 下面使用配置文件来设置网址。 1).首先在项目中添加一个ASP.NET 配置文件hosting.json,在配置文件中加入server.urls 节点。 { "server.urls": "http://localhost:5001;http://localhost:5002;http://*:5003"} 2).这里首先需要添加两个引用 "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0" "Microsoft.Extensions.Configuration.Json": "1.0.0" 3).Main方法添加配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public static void Main(string[] args) { var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) // 这里添加配置文件 .AddJsonFile(Path.Combine("config", "hosting.json"), true) .Build(); var host = new WebHostBuilder() .UseKestrel() // 添加配置 .UseConfiguration(config) .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .Build(); host.Run(); } 4).最后别忘了在project.json中添加输出配置,直接把整个config目录放进去了 1 2 3 4 5 6 7 8 […]
View Details.Net Core 2.2 项目部署到IIS
1、安装IIS所需的Host扩展 从官网(https://dotnet.microsoft.com/download/dotnet-core/2.2)下载对应的.net core版本的Runtime 里面有一个Runtime & Hosting Bundle,是IIS需要的模块扩展,用来处理Core相关的请求。 下载举例:https://dotnet.microsoft.com/download/thank-you/dotnet-runtime-2.2.5-windows-hosting-bundle-installer 2、安装模块拓展,并且查看IIS模块列表是否生效 注意,.Net Core 2.0之后的模块名叫AspNetCoreModuleV2,之前的模块名叫AspNetCoreModule,可以共存。 3、导出您的.Net Core项目到本地某文件夹位置。 3.1 主项目右键,点击“发布”。 3.2 发布目标,选“文件夹”,选择你想要的本地目录,用来存放这个Site所有的文件。 3.3 点击“发布”,成功生成项目发布文件。 这里注意处理下数据库,比如你的Sqllite数据库,是否已经完成复制过去,记得单独检查一下。 4、IIS中添加对应的网站,相关端口、IP可根据需要配置,或保持默认即可。 网站物理路径,选择刚才导出发布所在文件夹即可。 5、浏览网站即可访问。 如果出现500之类的错误,一方面检查之前的模块是否安装到位,一方面检查下数据库等文件和配置是否配置正确即可。 6、部分网络教程会提示,要把应用程序池改成未托管,不过经过实践,2.2版本不需要配置也可以正常运行,如果想配置的,找到Site对应的应用程序池,改成无托管代码即可。 from:https://www.cnblogs.com/craigtaylor/p/11143484.html
View Detailsasp.net+mysql解决Incorrect string value: '\xF0\x9F\x98\xAD
ALTER DATABASE 数据库 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; ALTER TABLE 表 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 数据库连接字符串加上:charset=utf8mb4
View Details解决mysql报错误 0x80004005 Incorrect string value: '\xF0\xA0\x83\x8A2\xE4…' for column
最近遇到一个mysql生产问题,一直报:报错误 0x80004005 Incorrect string value: '\xF0\xA0\x83\x8A2\xE4…' for column 经过排查原来数据库和表都是默认utf8编码,老司机都知道,mysql中的utf8编码有一个大坑,不是真正的utf8。当遇到特殊字符就会插入失败报下面的错误: MySql.Data.MySqlClient.MySqlException (0x80004005): Incorrect string value: '\xF0\xA0\x83\x8A2\xE4…' for column 使用环境: 1、asp.net core 2.2 2、dapper 3、mysql8 通过下面步骤完美解决: 一、首先查看当前数据库编码 1 show variables like 'character%' 最后必须要达到下面的设置: 二、更改数据库编码 1 ALTER DATABASE 数据库名称 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 三、更改所有表和列编码 先生成所有表的更改语句,这样可以批量mysql所有表和列编码为utf8mb4 1 2 3 4 5 6 7 8 9 10 SELECT CONCAT( 'ALTER TABLE ', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;' ) FROM information_schema.TABLES WHERE TABLE_SCHEMA =’数据库名称'; 把上面查询结果导出,执行就行了。 四、更改数据库配置 数据库配置my.ini或my.cnf,你的配置可能不叫这个句子。 修改为如下配置: 1 2 3 4 5 6 7 [client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] collation-server = utf8mb4_general_ci character-set-server = utf8mb4 更改之后重启mysql 五、修改数据库连接 经过上面4步骤,以为就万事大吉了。 注意:一定要修改程序的数据库连接,不然照样报错。 如下: 1 Host=localhost;Port=3306;Database=lanhu;Uid=www.lanhusoft.com;pwd=lanhusoft;Charset=utf8mb4; 之前我们写成utf8都不行,一定要写成utf8mb4 from:https://lesg.cn/Article-53016.html
View Detailsvue项目中json字符串转换成json对象
场景:在前端发送ajax请求是后台有时会返回json字符串,这样的数据需要转化成json对象才可以正常的使用 之前我在这个问题上困惑了好几天,从网上找了一些资料,使用了一下都是报错的,所以写着篇博客是为了让像我一样的新手可以少一些痛苦,尽快的完成任务 JSON.parse(jsonstr);//括号内为你需要转化json对象的内容 我标红的那一行就是转化json对象的,大家可以看一下,转化之前打印的red 和转化之后打印的this.bookcontent的格式是不一样的,之前是json字符串,之后的是json对象, created(){ getBookContent(this.bookId, this.chapterid).then(red =>{ // console.log(red) let a = JSON.parse(red.data);//将json字符串转换成json对象 this.bookcontent = a.chapter.chaptername // console.log(this.bookcontent) }).catch(err =>{ console.log(err,’请求失败') }) } ———————————————— 版权声明:本文为CSDN博主「qq_41114935」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_41114935/java/article/details/81284188
View DetailsNginx配置Https反向代理
ZERO 持续更新 请关注:https://zorkelvll.cn/blogs/zorkelvll/articles/2018/12/09/1544347717025 背景 本文主要是记录配置nginx反向代理https过程中的一些记录! 一、Nginx添加SSL模块 nginx默认缺少SSL模块支持,需要手动编译安装!由于本文之前已经编译安装过nginx,因此本文将是在原有基础之上编译安装添加SSL模块
|
1 2 3 4 5 6 7 |
cd /root/app/nginx-1.14.0 /usr/local/nginx/sbin/nginx -V #查看nginx旧的编译参数 ./configure [......旧的编译参数仍然保持不变] --prefix=/usr/local/nginx --with-http_ssl_module #在原有旧的编译参数基础之上添加新的模块--with-http_ssl_module make #注意:千万不能执行make install,否则原来nginx的一堆配置文件将被覆盖 cp /usr/local/nginx/sbin/nginx ~/ #备份原来的nginx可执行程序 cp objs/nginx /usr/local/nginx/sbin/ #将新编译的nginx可执行程序objs/nginx复制覆盖原nginx执行程序 #覆盖之后,重新启动nginx即为新的nginx |
二、免费获取SSL证书
|
1 2 3 4 |
#https://freessl.cn/ #注册freessl账号 #输入域名以及域名注册的邮箱地址,生成SSL证书 #到域名所在服务商位置,设置TXT解析以进行域名验证,如下 #或者aliyun 控台下载免费的域名证书 |
imagepng
|
1 |
#在freessl控制台进行域名验证,验证通过之后可以下载证书压缩文件解压之后传输到nginx所在服务器上(full_chain.pem和private.key两个文件) |
三、配置nginx
|
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 26 27 28 29 30 31 32 33 34 35 36 37 |
vim /usr/local/nginx/conf/nginx.conf #修改配置付下 server { listen 80; server_name caizhaoke.cn,www.caizhaoke.cn; rewrite ^(.*)$ https://www.caizhaoke.cn; } server { listen 443 ssl; server_name caizhaoke.cn,www.caizhaoke.cn; ssl on; #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则 ssl_certificate /root/data/cert/full_chain.pem; ssl_certificate_key /root/data/cert/private.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; ssl_session_timeout 10m; #SSL-END index index.jsp index.html; location / { add_header Content-Security-Policy upgrade-insecure-requests; # for 解决 https 之后静态资源http mixed content问题 proxy_pass http://pipe$request_uri; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; client_max_body_size 10m; } } /usr/local/nginx/sbin/nginx -t #检测nginx配置文件是否有错误 /usr/local/nginx/sbin/nginx -s reload #重启nginx #保证服务器以及云服务商的防火墙开启443端口之后,浏览器中访问https即可验证成功 |
作者:zorkelvll 链接:https://www.jianshu.com/p/e46ec3fc121e 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
View Details域名、https、nginx反向代理小结
1、域名备案:指域名与公网ip的绑定,绑定后即可使用80/443等端口。 2、域名添加A记录子域名后指定对应的公网ip地址,无法指定端口。 3、只要使用https就必须使用证书,证书可以自己购买也可使用openssl生成,但是自己生成的证书安全性较差,仍然容易被串改,而且网页显示与购买的有区别。 4、nginx反向代理配置 可以不使用upstream,直接在prox_pass后添加真正的服务器地址,但是使用upstream好处更多,如实现负载均衡、设置权重等功能。 nginx部分内容详解如下: proxy_redirect off; 重写后端服务器的location和refresh头。 proxy_set_header Host $host; 重写发送给后端服务器的请求头内容。 proxy_connect_timeout 300; 代理服务器接收请求到连接后端服务器的最长等待时间。 proxy_buffer_size 4k; 后端响应的缓冲区数量和大小。 proxy_buffers 4 32k; 请求后端的缓冲区数量和大小。 proxy_busy_buffers_size 64k; 当代理服务器忙时,缓冲区的最大值。 proxy_send_timeout 300 将超时与请求传输到代理服务器分配。 proxy_read_timeout 300 NGINX等待获取请求响应的时间。 upstream ip_hash:指令通过ip地址生成hash值将客户端均匀地连接到所有服务器。 keepalive:指令指定每个worker进程缓存后端服务器的长连接数。 least_conn:指令激活负载均衡算法,使用最少连接数。 server: —- weight:设置服务器的优先级。 —- fail-timeout、max-fails:在fail-timeout时间内出现了max-fails次数的连接失败,nginx则认为该后端服务器已经挂掉了。 —- backup:指定服务器的备用机器,只有非backup机器挂掉,才会接收请求。 —- down:指定当前的服务器不再接收请求。 对upstream仍不了解,可参考此网站实例:https://www.cnblogs.com/wzjhoutai/p/6932007.html from:https://www.cnblogs.com/wdp-home/p/12092480.html
View Detailsvue中 关于$emit的用法
1、父组件可以使用 props 把数据传给子组件。 2、子组件可以使用 $emit 触发父组件的自定义事件。 vm.$emit( event, arg ) //触发当前实例上的事件 vm.$on( event, fn );//监听event事件后运行 fn; 例如:子组件: <template> <div class="train-city"> <h3>父组件传给子组件的toCity:{{sendData}}</h3> <br/><button @click=’select(大连)'>点击此处将‘大连’发射给父组件</button> </div> </template> <script> export default { name:’trainCity', props:['sendData'], // 用来接收父组件传给子组件的数据 methods:{ select(val) { let data = { cityname: val }; this.$emit('showCityName',data);//select事件触发后,自动触发showCityName事件 } } } </script> 父组件: <template> <div> <div>父组件的toCity{{toCity}}</div> <train-city @showCityName="updateCity" :sendData="toCity"></train-city> </div> <template> <script> import TrainCity from "./train-city"; export default { name:’index', components: {TrainCity}, data () { return { toCity:"北京" } }, methods:{ updateCity(data){//触发子组件城市选择-选择城市的事件 this.toCity = data.cityname;//改变了父组件的值 console.log('toCity:’+this.toCity) } } } </script> from:https://www.cnblogs.com/shaozhu520/p/10637455.html
View DetailsIEnumerable和IQueryable区分
LINQ查询方法一共提供了两种扩展方法,在System.Linq命名空间下,有两个静态类:Enumerable类,它针对继承了IEnumerable<T>接口的集合进行扩展;Queryable类,针对继承了IQueryable<T>接口的集合进行扩展。我们会发现接口IQueryable<T>实际也是继承了IEnumerable<T>接口的,既然这样微软为什么要设计出两套扩展方法呢? 从LINQ查询功能上我们知道实际上可以分为三类:LINQ to OBJECTS、LINQ to SQL和LINQ to XML。其实微设计这两套接口主要是针对LINQ to OBJECTS和LINQ to SQL,两者对于查询的内部处理机制是完全不同的。针对LINQ to OBJECTS 时,使用Enumerable中的扩展方法对本地集合进行排序和查询操作,查询参数接受的是Func<>,Func<>叫做谓语表达式,相当于一个委托。针对LINQ to SQL时,则使用Queryable中的扩展方法,它接受的是Expression<>。 那么,到底什么时候使用IQueryable<T>,什么时候使用IEnumerable<T>? 首先我们来看一下LINQ to SQL的代码: using (var context = new NorthwindEntities()) { var orderTmp = context.Orders.Where(p=>p.CustomerID=="RATTC"); var orders = orderTmp.Where(p => p.OrderDate > new DateTime(1997, 1, 1)); foreach (var order in orders) { Console.WriteLine("OrderId:" + order.OrderID); } } 通过vs的Intellisense我们可以看到Where的返回类型为IQueryable,参数是Expression类型的: 我们再看一下这一段代码: using (var context = new NorthwindEntities()) { var orderTmp = context.Orders.Where(p => p.CustomerID == "RATTC").AsEnumerable(); var orders = orderTmp.Where(p => p.OrderDate > new DateTime(1997, 1, 1)); foreach (var order in orders) { Console.WriteLine("OrderId:" + order.OrderID); } } 这段代码的不同在于我们将LINQ的查询返回IEnumerable类型,我们看一下vs的Intellisense效果: 由于我们在LINQ查询的时候加上了AsEnumerable(),因此我们在第二条语句能看到返回类型已经变为IEnumerable,参数也变成了Func<>类型。 至于这两段代码到底有什么区别,我们分别执行代码,在sql profiler里看一下生成的sql语句: 第一段代码效果: 虽然我们使用两条语句进行了查询,但最终只生成了一条SQL语句,将查询参数合并了。 第二代码效果: 这一次我们依然只看到一条SQL语句,但查询条件也只有一个,但两次查询的结果是一致。 原因在于Func<>直接会被编译器编译成IL代码,但是Expression<>只是存储了一个表达式树,在运行期作处理,LINQ to SQL最终会将表达式树转为相应的SQL语句,然后在数据库中执行。 现在我们应该知道何时使用IEnumerable<T>,何时使用Iqueryable<T>。 from:https://www.cnblogs.com/zgqys1980/p/4047315.html
View DetailsC#定义泛型方法错误-类型“T”必须是引用类型才能用作泛型类型或方法“System.Data.Linq.Table”中的参数“TEntity”
错误写法:
|
1 2 3 4 |
public void GetTableElements<T>() { Table<T> UserTable = m_DataContext.GetTable<T>(); } |
解决方法: 在()后面加上where T : class即可,表示为泛型T为类型才能进行转换
|
1 2 3 4 |
public void GetTableElements<T>() where T : class { Table<T> UserTable = m_DataContext.GetTable<T>(); } |
from:https://blog.csdn.net/lujiachun1/article/details/77941859
View Details