【.net core 7】新建net core web api并引入日志、处理请求跨域以及发布

效果图:

1.新建.net core web api项目

选择src文件夹==》添加==》新建项目

输入框搜索:web api ==》选择ASP.NET Core Web API

输入项目名称、选择位置为项目的 src文件夹下

我的项目是net 7.0版本,实际选择请看自己的项目规划

2.处理Program入口文件引入日志和新建Startup.cs

需要安装NuGet程序依赖包:Newtonsoft.Json、Serilog.AspNetCore、Serilog.Sinks.Async、Serilog.Sinks.File

Program文件代码如下:

csharp 复制代码
    /// <summary>
    /// 
    /// </summary>
    public class Program
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="args"></param>
        public static int Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
#if DEBUG
                 .MinimumLevel.Debug()
#else
                .MinimumLevel.Information()
#endif
                 .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
                .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning)
                .Enrich.FromLogContext()
                .WriteTo.Async(c => c.File("Logs/logs.txt", rollingInterval: RollingInterval.Hour))
#if DEBUG
                 .WriteTo.Async(c => c.Console())
#endif
                 .CreateLogger();
            // Wrap creating and running the host in a try-catch block
            try
            {
                Log.Information("Starting host");

                CreateHostBuilder(args).Build().Run();
                return 0;
            }
            catch (Exception ex)
            {
                Log.Fatal(ex, "Host terminated unexpectedly");
                return 1;
            }
            finally
            {
                Log.CloseAndFlush();
            }

        }

        /// <summary>
        /// 载入Startup配置、以及新增日志
        /// </summary>
        /// <param name="args"></param>
        /// <returns></returns>
        public static IHostBuilder CreateHostBuilder(string[] args) =>
           Host.CreateDefaultBuilder(args)
               .UseSerilog()
               .ConfigureWebHostDefaults(webBuilder =>
               {
                   var configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();


                   var url = configuration["Urls"];
                   webBuilder.UseUrls(url);
                   webBuilder
#if !DEBUG
                    .UseEnvironment("ASPNETCORE_HOSTINGSTARTUPASSEMBLIES")
#endif
                   .UseStartup<Startup>();
               });

    }

Startup文件代码如下

csharp 复制代码
/// <summary>
/// 
/// </summary>
public class Startup
{
    /// <summary>
    /// 
    /// </summary>
    /// <param name="configuration"></param>
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    /// <summary>
    /// 
    /// </summary>
    public IConfiguration Configuration { get; }

    /// <summary>
    /// This method gets called by the runtime. Use this method to add services to the container.
    /// </summary>
    /// <param name="services"></param>
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new OpenApiInfo { Title = "这里替换成你新建webApi项目的名称", Version = "v1" });
            var basePath = PlatformServices.Default.Application.ApplicationBasePath;
            var XmlPath = Path.Combine(basePath, "这里替换成你新建webApi项目的名称.xml");//此处生成xml文档
            c.IncludeXmlComments(XmlPath);
        });
        //处理跨域问题
        services.AddCors(option => {
            option.AddPolicy("any", policy =>
            {
                policy.SetIsOriginAllowed(_ => true)   //允许所有客户端地址请求
                    .AllowAnyHeader()
                    .AllowAnyMethod()
                    .AllowCredentials();
            });
        });
        services.AddMemoryCache();
        services.AddHttpContextAccessor();
    }

    /// <summary>
    /// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    /// </summary>
    /// <param name="app"></param>
    /// <param name="env"></param>
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseSerilogRequestLogging();

        app.UseRouting();
        app.UseCors("any");//处理跨域问题
        app.UseSwagger();
        app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "这里替换成你新建webApi项目的名称 v1"));
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers().RequireCors("any");
        });
    }
}

appsettings.json代码如下

csharp 复制代码
{
  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "Urls": "http://*:44375;",
  "AllowedHosts": "*"
 
}

3.处理launchSettings.json文件,使本地启动项目时是以iis运行

csharp 复制代码
{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:44375",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "swagger",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "SkyAPM.Agent.AspNetCore"
      }
    },
    "这里替换成你新建webApi项目的名称": {
      "commandName": "Project",
      "launchBrowser": true,
      "dotnetRunMessages": true,
      "launchUrl": "swagger",
      "applicationUrl": "http://localhost:44375",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "SkyAPM.Agent.AspNetCore"
      }
    }
  }
}

处理在文件里生成xml文档

4.在Controllers控制器写接口

在项目的Controllers文件夹下,新建一个xxxxController.cs

csharp 复制代码
 /// <summary>
 /// 名称
 /// </summary>
 [ApiController]
 [Route("outApi/[controller]/[action]")]
 public class xxxxController : ControllerBase
 {
     private readonly IHttpContextAccessor _httpContextAccessor;
     /// <summary>
     /// 
     /// </summary>
     public questionController(IHttpContextAccessor httpContextAccessor)
     {
         _httpContextAccessor = httpContextAccessor;
     }

     /// <summary>
     /// 获取请求客户端的ip地址
     /// </summary>
     /// <returns></returns>
     [HttpGet]
     public async Task<string> testIP()
     {

         Log.Information("IP:" + Request.HttpContext.Connection.RemoteIpAddress.ToString() + "InputQuestion入参:" );
         string ipAddress = _httpContextAccessor.HttpContext.Connection.RemoteIpAddress?.ToString();
         return ipAddress;
     }
 }

5.设置项目启动项并运行

选择解决方案右键==>选择 配置启动项目==>弹窗里选择 多个启动项目==》把新建的web api的操作下拉框里改成启动==>点击应用按钮==>点击确定按钮

然后按ctrl+F5运行

电脑桌面右下角有iis的图标

6.打包发布

选择新建的web api项目==》点击 发布

配置选择"文件夹"如下

文件夹位置 路径默认不管

更改配置如下

然后点击发布按钮

7.部署到centos服务器,请参考我的另外一篇文章

【liunx配置服务自启动】liunx系统设置net Core程序开机自启动服务 centos系统

相关推荐
码农君莫笑2 天前
Blazor项目中使用EF读写 SQLite 数据库
linux·数据库·sqlite·c#·.netcore·人机交互·visual studio
_oP_i2 天前
.NET Core 项目配置到 Jenkins
运维·jenkins·.netcore
A^mber4 天前
基于.NetCore 的 AI 识别系统的设计与实现
人工智能·.netcore
Jeffrey~~6 天前
.Net_比对Json文件是否一致
c#·json·.net·.netcore
吳所畏惧6 天前
C#轻松实现Winform监控文件夹变化以及监控文件新增、修改、删除、重命名等操作保姆级详细教程
开发语言·windows·c#·.net·.netcore
CS软件开发框架6 天前
C/S软件授权注册系统-轻量级WebApi服务器介绍
运维·服务器·visualstudio·c#·.net·.netcore
鸠摩智首席音效师7 天前
如何使用 Docker 容器化 .NET Core 应用程序 ?
docker·容器·.netcore
洱海之月7 天前
.Net Core框架创建一个Windows服务类型的应用程序
.netcore
洱海之月7 天前
.Net Core配置使用Log4Net日志记录
.netcore
张3蜂7 天前
.NET Core 各版本特点、差异及适用场景详解
asp.net·.net·.netcore