1、打开vs2019—创建新项目—.NET Core控制台应用—输入项目名称和位置等
2、依赖注入和启动控制台程序
代码:
static void Main(string[] args)
{
Console.WriteLine("程序测试!");
Console.Title = "TestServer";
using (ServiceProvider container = RegisterServices())
{
try
{
var testClass = container.GetRequiredService();
testClass.Start();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
引入如下包:Microsoft.Extensions.DependencyInjection
3、新建一个逻辑类
public class TestClass
{
public void Start()
{
Console.WriteLine("处理逻辑");
}
}
4、对控制台程序的依赖注入
代码:
///
/// 进行依赖注入
///
///
static ServiceProvider RegisterServices()
{
var services = new ServiceCollection();
services.AddSingleton();
return services.BuildServiceProvider();
}
引入如下包:Microsoft.Extensions.Configuration
5、新建类以读取配置文件
public static class AppConfigurations
{
private static readonly ConcurrentDictionary ConfigurationCache;
static AppConfigurations()
{
ConfigurationCache = new ConcurrentDictionary();
}
public static IConfigurationRoot Get(string path, string environmentName = null)
{
var cacheKey = path + "#" + environmentName;
return ConfigurationCache.GetOrAdd(
cacheKey,
_ => BuildConfiguration(path, environmentName)
);
}
private static IConfigurationRoot BuildConfiguration(string path, string environmentName = null)
{
var builder = new ConfigurationBuilder()
.SetBasePath(path)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
if (!string.IsNullOrWhiteSpace(environmentName))
{
builder = builder.AddJsonFile($"appsettings.{environmentName}.json", optional: true);
}
builder = builder.AddEnvironmentVariables();
return builder.Build();
}
}
引入如下包:
6、启动web监听
代码:
Console.WriteLine("是否启动WebAPI?yes/no");
string readapi = Console.ReadLine();
if (readapi == "yes")
{
var host = WebHost.CreateDefaultBuilder(args)
//.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
//.UseUrls("http://*:8029")
.UseIISIntegration()
.UseStartup()
.Build();
host.Run();
Console.WriteLine("接口停止监听,继续输入命令退出服务!强行关闭进程有丢数据风险!");
}
7、创建类
Startup.cs:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddMvc().AddJsonOptions(options =>
{
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
});
services.AddSingleton();
services.AddScoped();
services.AddCors(options =>
{
options.AddPolicy("any", builder =>
{
builder.AllowAnyOrigin() //允许任何来源的主机访问
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();//指定处理cookie
});
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
//app.UseHsts();
}
app.UseHttpsRedirection();
app.UseMvc();
app.UseCors("any");
}
}
引入如下包:
8、创建如下类:web配置文件(切记,配置文件始终复制)
ConfigurationUtil.cs
public class ConfigurationUtil
{
public static readonly IConfiguration Configuration;
static ConfigurationUtil()
{
Configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", true)
.Build();
}
public static T GetSection(string key) where T : class, new()
{
var obj = new ServiceCollection()
.AddOptions()
.Configure(Configuration.GetSection(key))
.BuildServiceProvider()
.GetService>()
.Value;
return obj;
}
public static string GetSection(string key)
{
return Configuration.GetValue(key);
}
}
9、新建配置文件 appsettings.json
{
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://*:8083"
}
}
},
"compilerOptions": {
"noImplicitAny": false,
"noEmitOnError": true,
"removeComments": false,
"sourceMap": true,
"target": "es5"
},
"exclude": [
"node_modules",
"wwwroot"
],
"ConnectionStrings": {
"RedisConnectionString": "*"
}
}
10、新建一个controller类
在class前写上
[EnableCors("any")]
[ApiController]
然后写一个测试类
[Route("api/StructData/GetTest")]
[HttpPost]
public object GetTest()
{
try
{
//_alarmData.DelSomthing();
JObject result = new JObject();
result.Add("ReturnCode", "OK");
return result;
}
catch (Exception)
{
return new string[] { "value1", "value2" };
}
}