把Web Api OData移植到Asp.Net Core(5)-https

2023-11-03 18:10
文章标签 https web core 移植 api asp net odata

本文主要是介绍把Web Api OData移植到Asp.Net Core(5)-https,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OData网站如果采用http明文传输,安全性很差,最好采用https加密传输。服务端要使用SSL证书。
在开发阶段,可以使用自签名SSL证书用于软件调试和测试。如果只有PC和移动客户端,可以在发布后继续使用自签名证书。如果有网页客户端,用户会在浏览器看到网站的证书信息,为了给用户一个安全的体验,必须购买正式的SSL证书。

1. 创建自签名SSL证书

如果网站部署在Windows Server,可以在IIS中直接创建自签名证书,非常简单。
Linux服务器创建自签名证书不像IIS这么方便。如果直接在Linux系统里创建自签名证书,需要下载,安装一堆东西,甚至可能还要重新编译,比较繁琐。其实,完全可以在Windows系统里创建自签名证书,然后拿到Linux系统去使用。
在以下网站下载openssl的Windows安装包。
https://slproweb.com/products/Win32OpenSSL.html
如果下载慢可以用迅雷。
这里写图片描述

下载后直接安装,全部默认好了。
然后以管理器权限打开控制台,输入以下命令创建自签名证书。如果提示密码,输入xxx,这个以后会用到。这个证书采用sha256算法,有效期365天。

C:\OpenSSL-Win64\bin\openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout myweb.key -out myweb.crt -subj /CN=*.myweb.com
C:\OpenSSL-Win64\bin\openssl pkcs12 -export -out myweb.pfx -inkey myweb.key -in myweb.crt

然后可以得到3个文件。后面要用到。
myweb.crt
myweb.key
myweb.pfx

2. 修改网站代码支持https

为了简单起见,直接修改Program.cs,整个网站都使用https传输。

    public static IWebHost BuildWebHost(string[] args) =>WebHost.CreateDefaultBuilder(args).UseKestrel(ConfigHttps)//必须指定端口,否则在Win10命令行运行端口是5000,在CentOS docker运行端口是80//.UseUrls("http://*:5000").UseStartup<Startup>().Build();private static void ConfigHttps(KestrelServerOptions options){options.Listen(IPAddress.Any, 5000, listenOptions =>{//填入pfx文件路径和指定的密码string pfxFile = Path.Combine(Directory.GetCurrentDirectory(), "myweb.pfx");listenOptions.UseHttps(pfxFile, "xxx");});}

给项目添加myweb.pfx,设置属性为【如果较新则复制】,生成操作为【内容】。重新发布网站。运行网站,访问https://localhost:5000/odata/Books,浏览器会提示网站不安全。
这里写图片描述

点击继续转到网页,浏览器地址栏提示证书错误,点击该信息会提示网站问题。
这里写图片描述

如果购买了正式的证书,浏览器地址栏会提示一把锁,例如访问百度网站:
这里写图片描述

3. docker网站采用SSL证书

修改nginx配置文件。需要用到2个证书文件。

server {listen 9000 ssl;ssl_certificate      myweb.crt;ssl_certificate_key  myweb.key;location / {proxy_pass https://odataweb-service:5000;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection keep-alive;proxy_set_header Host $host;proxy_cache_bypass $http_upgrade;}

修改docker-compose.yml文件。挂载当前目录下的2个证书文件给nginx容器使用。

version: '3'services:mysql-service:container_name: mysqlserviceimage: mysqlenvironment:- MYSQL_ROOT_PASSWORD=xxx
    volumes:- ./data:/var/lib/mysql
    restart: alwaysodataweb-service:container_name: odatawebserviceimage: odatawebimagebuild:context: ./odatawebdockerfile: Dockerfileenvironment:- ASPNETCORE_ENVIRONMENT=Development
    restart: alwaysdepends_on:- mysql-service
    links:- mysql-service
nginx-proxy:container_name: nginxproxyimage: nginx    ports:- "9000:9000"
    volumes:- ./nginx.conf:/etc/nginx/conf.d/default.conf
      - ./myweb.crt:/etc/nginx/myweb.crt
      - ./myweb.key:/etc/nginx/myweb.key
    restart: alwayslinks:- odataweb-service

然后把myweb.crt、myweb.key放在docker-compose.yml相同的目录下,在Linux系统里重新创建、运行容器。
访问https://192.168.80.134:9000/odata/Books,检查结果。

4. 客户端访问https网站

新建Winform项目WinODataClient。
OData Client Code Generator还没有发布支持VS2017的版本,改用Simple.OData.Client封装客户端对OData服务器的访问。
NuGet安装Simple.OData.V4.Client 4.29.0。
做一个简单的CURD测试。

    private Uri DataUri = new Uri("https://192.168.80.134:9000/odata");private ODataClientSettings settings;private void frmMain_Load(object sender, EventArgs e){//允许访问https网站,对http访问无干扰ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };//初始化OData客户端settings = new ODataClientSettings(DataUri);settings.PayloadFormat = ODataPayloadFormat.Json;settings.RequestTimeout = TimeSpan.FromSeconds(30);btnRefresh.Click += async (ss, ee) =>{var client = new ODataClient(settings);var result = await client.For<Book>().FindEntriesAsync();var books = result.ToList();this.dataGridViewBook.DataSource = books;};btnQuery.Click += async (ss, ee) =>{var client = new ODataClient(settings);var query = client.For<Book>("Books");//query.Skip(2).Top(2);//分页query.OrderBy(x => x.Price);//排序query.Filter(x => x.Author == "金庸");//条件var result = await query.FindEntriesAsync();var books = result.ToList();this.dataGridViewBook.DataSource = books;};btnAdd.Click += async (ss, EnumerableExecutor) =>{var client = new ODataClient(settings);Book book = new Book() { Name = "绝绝代双骄", PublishDate = new DateTime(1957, 10, 1), Author = "古龙", Price = 10.5f };var result = await client.For<Book>().Set(book).InsertEntryAsync(true);};btnEdit.Click += async (ss, ee) =>{var client = new ODataClient(settings);var result = await client.For<Book>().Key(1).Set(new { Price = DateTime.Now.Second }).UpdateEntryAsync(true);};btnDel.Click += async (ss, ee) =>{var client = new ODataClient(settings);await client.For<Book>().Key(1).DeleteEntryAsync();};}

运行软件报错:
Unable to load OData adapter from assembly Simple.OData.Client.V4.Adapter
FileLoadException: 未能加载文件或程序集“Microsoft.OData.Edm, Version=6.17.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
Simple.OData.Client 4.29.0版本要求的Microsoft.OData.Edm至少要6.17.0,但是NuGet安装的时候只安装了6.0.0,在NuGet管理器中把Microsoft.OData.Core升级到6.17.0,它会自动升级2个关联库Microsoft.OData.Edm和Microsoft.Spatial到6.17.0,然后再次运行没问题了。

这篇关于把Web Api OData移植到Asp.Net Core(5)-https的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/339952

相关文章

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

SpringBoot项目Web拦截器使用的多种方式

《SpringBoot项目Web拦截器使用的多种方式》在SpringBoot应用中,Web拦截器(Interceptor)是一种用于在请求处理的不同阶段执行自定义逻辑的机制,下面给大家介绍Sprin... 目录一、实现 HandlerInterceptor 接口1、创建HandlerInterceptor实

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

python通过curl实现访问deepseek的API

《python通过curl实现访问deepseek的API》这篇文章主要为大家详细介绍了python如何通过curl实现访问deepseek的API,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... API申请和充值下面是deepeek的API网站https://platform.deepsee