HttpSelfHostConfiguration可以开启自宿主服务,即监听本地端口,然后发布对应的api服务,其实就是个webapi项目,但是可以不用挂载在IIS上,程序直接运行就可以
上次做完了HttpSelfHostConfiguration后,有要求,需要让自宿主服务支持https协议,这就麻烦了
要知道https可是需要证书啥的,刚好研究了一段时间,再同事的帮助下也算是做出来了,下来贴点教程数据上来
整个注册流程中需要用到IIS来生成证书
- 注册安全证书
在IIS中选择服务器证书
依次点击 创建自签名证书->输入名称->确定保存
拷贝证书的指纹
点击新增的证书信息,拷贝指纹数据,用以备用
- 使用cmd命令 删除、注册证书
使用https需要 要用CMD命令 将证书的指纹和 系统的端口、软件的GUID进行绑定
这样子 HttpSelfHostConfiguration才能启动对应端口的https服务,当然证书肯定也是用的 咱们新创建的证书喽,这一步 我略去,仅把指令贴出来,因为我后面会用代码去执行 这个cmd命令
先执行删除,在执行添加注册,防止端口已经被其他证书占用了
// port=端口,pfx=证书指纹 ,guid=当前程序GUID
netsh http delete sslcert ipport=0.0.0.0:port
netsh http add sslcert ipport=0.0.0.0:port certhash=pfx appid={Guid}
- 代码中启动 https服务
using Newtonsoft.Json;
using Robot2.OpenApi.V2.Filter;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.ServiceModel.Channels;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.Http.Cors;
using System.Web.Http.SelfHost;
using System.Web.Http.SelfHost.Channels;
namespace ConsoleApp2
{
internal class Program
{
static void Main(string[] args)
{
try
{
string url = string.Format("https://localhost:20101");
string port = "20101";
string pfx = "e063bb5f4578a211fab76439e38cc93d92e56286";
string guid = "78a9b36e-51e3-44e9-9ee0-abfd6d0e6b8d";
List<string> cmds = new List<string>() {
$"/c netsh http delete sslcert ipport=0.0.0.0:{port}",
$"/c netsh http add sslcert ipport=0.0.0.0:{port} certhash={pfx} appid="+"{"+guid+"}",
};
foreach (string cmd in cmds)
{
var process = new Process()
{
StartInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
Arguments = cmd,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = false
}
};
process.Start();
process.WaitForExit();
}
//var config = new HttpSelfHostConfiguration(url);
var config = new ExtendedHttpSelfHostConfiguration(url);//使用Https
config.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
config.Formatters.Add(new System.Net.Http.Formatting.JsonMediaTypeFormatter());
HttpSelfHostServer _hostServer = new HttpSelfHostServer(config);
config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
config.EnableCors(new EnableCorsAttribute("*", "*", "GET, POST, PUT, DELETE, OPTIONS") { SupportsCredentials = true });
config.Filters.Add(new AuthorFilter());
config.Filters.Add(new ExceptionFilter());
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}",
defaults: new
{
controller = "Home",
action = "Index",
id = RouteParameter.Optional
});
_hostServer.OpenAsync().Wait();
Console.WriteLine("服务端口打开成功");
}
catch (Exception ex)
{
Console.WriteLine("服务端口打开异常:" + JsonConvert.SerializeObject(ex));
}
Console.ReadKey();
}
public class ExtendedHttpSelfHostConfiguration : HttpSelfHostConfiguration
{
public ExtendedHttpSelfHostConfiguration(string baseAddress) : base(baseAddress) { }
public ExtendedHttpSelfHostConfiguration(Uri baseAddress) : base(baseAddress) { }
protected override BindingParameterCollection OnConfigureBinding(HttpBinding httpBinding)
{
if (BaseAddress.ToString().ToLower().Contains("https://"))
{
httpBinding.Security.Mode = HttpBindingSecurityMode.Transport;
}
return base.OnConfigureBinding(httpBinding);
}
}
}
}
执行https服务器下的controller方法成功(具体我这个Controller怎么写的,大家可以参考我上一篇的
HttpSelfHostConfiguration文章
特别提醒,https和http请求本身存在证书校验的问题,我用的postman请求的数据,postman默认是不支持自签名证书的,需要设置下 ,设置的链接如下
https://blog.csdn.net/q7w8e9r4/article/details/132140205文章来源:https://www.toymoban.com/news/detail-775066.html
遇到 “postman Self-signed SSL certificate blocked” 错误是因为 Postman 检测到你正在尝试访问一个使用自签名 SSL 证书的网站,并且默认情况下,Postman 会阻止对这样的网站进行请求。 要解决这个问题,你可以按照以下步骤进行操作:
1.打开 Postman:打开 Postman 应用程序。
2.设置 SSL 证书验证:点击左上角的 “Settings”(设置)按钮,然后选择 “Settings”(设置)选项。
3.禁用 SSL 证书验证:在 “Settings”(设置)页面的左侧导航栏中,选择 “General”(常规)选项。在右侧的 “SSL certificate verification”(SSL 证书验证)部分,将开关切换为关闭状态。
4.重新发送请求:回到 Postman 的主界面,重新发送你的请求。 请注意,禁用 SSL 证书验证可能会导致你的请求不再验证服务器的证书,从而可能存在安全风险。因此,请确保你对要访问的网站的可信度有所了解,并仔细考虑在禁用 SSL 证书验证之前的安全性。 如果你仍然希望进行 SSL 证书验证,但遇到了自签名 SSL 证书的问题,你可以考虑导入服务器的自签名证书到 Postman 中。具体步骤如下:
5.获取自签名 SSL 证书:从服务器管理员或网站所有者获取自签名 SSL 证书文件(通常是以 .crt 或 .pem 结尾的文件)。
6.导入 SSL 证书:在 Postman 应用程序中,点击左上角的 “Settings”(设置)按钮,然后选择 “Settings”(设置)选项。在 “Settings”(设置)页面的左侧导航栏中,选择 “Certificates”(证书)选项。点击 “Add Certificate”(添加证书)按钮,并选择你的 SSL 证书文件。按照指示完成证书导入过程。
7.重新发送请求:回到 Postman 的主界面,重新发送你的请求。 通过导入自签名 SSL 证书,Postman 将能够验证服务器的证书,并安全地进行请求。
————————————————
版权声明:本文为CSDN博主「抓饭不吃皮牙子」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/q7w8e9r4/article/details/132140205文章来源地址https://www.toymoban.com/news/detail-775066.html
到了这里,关于HttpSelfHostConfiguration+.net framework4.5.2 发布HTTPS服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!