.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配置的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net Core安全防护-客户端IP白名单限制

Confluence 6 配置白名单

升级无线网卡怎么刷白名单

一道面试题引发的思考第一篇-文件上传白名单绕过

一道面试题引发的思考第一篇-文件上传白名单绕过

uniapp h5+webapi 实现微信浏览器的自定义分享(微信JSSDK)