.Net Core WebApi相关配置包含白名单IP和Port配置
Posted シ゛甜虾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.Net Core WebApi相关配置包含白名单IP和Port配置相关的知识,希望对你有一定的参考价值。
官网帮助
Create web APIs with ASP.NET Core | Microsoft Docs
一、命令配置ip端口
命令行输入:
set ASPNETCORE_URLS=http://127.0.0.1:8080 ,修改默认地址,端口。
set ASPNETCORE_URLS=https://localhost:7777;http://localhost:9999
启动时配置
dotnet duckling.consulTest.Service.dll --urls="http://*:5728"
二、代码配置ip端口
相比net core 2.0时候的方式,net core 3.0修改webapi运行时的端口号,要简单很多。
net core 3.0的现在只需要在appsettings.json文件里面,加上"urls":"http://localhost:2001;https://localhost:2002"。发布程序后,直接运行,就可以达到效果。
或者添加一个hostsettings.json里面添加
{
"urls": "https://localhost:7019;http://localhost:5019"
}
代码添加
builder.Host.ConfigureHostConfiguration(configHost =>
{
configHost.SetBasePath(Directory.GetCurrentDirectory());
configHost.AddJsonFile("hostsettings.json", optional: true);//重要,其他行可以不需要
configHost.AddEnvironmentVariables(prefix: "PREFIX_");
configHost.AddCommandLine(args);
});
还有这种操作
builder.Host.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseUrls("http://*:8003"); // 这里默认是http://*:5000 .现在改成8003端口
});
编译通过了,但是运行出现
三、代码配置根节点访问
什么叫根节点访问呢?简单的说就是输入ip和端口即可直接跳转到网页,不用加上这里的网址https://ip:port/网址
不同的是网址,配置c.RoutePrefix = string.Empty;网址中就可以没有swagger
四、配置IP白名单
添加builder.Services.AddScoped部分代码
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
builder.Services.AddScoped<ClientIpCheckActionFilter>(container =>
{
var loggerFactory = container.GetRequiredService<ILoggerFactory>();
var logger = loggerFactory.CreateLogger<ClientIpCheckActionFilter>();
return new ClientIpCheckActionFilter("127.0.0.1;192.168.1.5;::1", logger);
});
增加ClientIpCheckActionFilter类
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System.Net;
namespace WebApiTest
{
public class ClientIpCheckActionFilter : ActionFilterAttribute
{
private readonly ILogger _logger;
private readonly string _safelist;
public ClientIpCheckActionFilter(string safelist, ILogger logger)
{
_safelist = safelist;
_logger = logger;
}
public override void OnActionExecuting(ActionExecutingContext context)
{
var remoteIp = context.HttpContext.Connection.RemoteIpAddress;
_logger.LogDebug("Remote IpAddress: {RemoteIp}", remoteIp);
var ip = _safelist.Split(';');
var badIp = true;
if (remoteIp.IsIPv4MappedToIPv6)
{
remoteIp = remoteIp.MapToIPv4();
}
foreach (var address in ip)
{
var testIp = IPAddress.Parse(address);
if (testIp.Equals(remoteIp))
{
badIp = false;
break;
}
}
if (badIp)
{
_logger.LogWarning("Forbidden Request from IP: {RemoteIp}", remoteIp);
context.Result = new StatusCodeResult(StatusCodes.Status403Forbidden);
return;
}
base.OnActionExecuting(context);
}
}
}
五、Https证书相关
ListenOptions Class (Microsoft.AspNetCore.Server.Kestrel.Core) | Microsoft Docs
以上是关于.Net Core WebApi相关配置包含白名单IP和Port配置的主要内容,如果未能解决你的问题,请参考以下文章