From 22e533e17134bac444cd7634dc1caf17f37454df Mon Sep 17 00:00:00 2001
From: wanggaofeng <15601716045@163.com>
Date: Tue, 2 Jan 2024 18:50:16 +0800
Subject: [PATCH] =?UTF-8?q?=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
HttpClientStudy.Model/Account.cs | 23 +++
HttpClientStudy.Model/Class1.cs | 7 -
HttpClientStudy.UnitTest/GlobalUsings.cs | 9 +-
.../HttpClientStudy.UnitTest.csproj | 1 +
HttpClientStudy.UnitTest/UnitTest1.cs | 11 --
HttpClientStudy.UnitTest/UseXunit.cs | 24 +++
.../WebApp/BaseResultTest.cs | 144 ++++++++++++++++++
HttpClientStudy.WebApp/BaseResult.cs | 120 +++++++++++++++
.../Controllers/AccountController.cs | 38 +++++
.../Controllers/WeatherForecastController.cs | 33 ----
HttpClientStudy.WebApp/Models/UserForToken.cs | 23 +++
.../Properties/launchSettings.json | 2 +-
HttpClientStudy.WebApp/WeatherForecast.cs | 13 --
13 files changed, 382 insertions(+), 66 deletions(-)
create mode 100644 HttpClientStudy.Model/Account.cs
delete mode 100644 HttpClientStudy.Model/Class1.cs
delete mode 100644 HttpClientStudy.UnitTest/UnitTest1.cs
create mode 100644 HttpClientStudy.UnitTest/UseXunit.cs
create mode 100644 HttpClientStudy.UnitTest/WebApp/BaseResultTest.cs
create mode 100644 HttpClientStudy.WebApp/BaseResult.cs
create mode 100644 HttpClientStudy.WebApp/Controllers/AccountController.cs
delete mode 100644 HttpClientStudy.WebApp/Controllers/WeatherForecastController.cs
create mode 100644 HttpClientStudy.WebApp/Models/UserForToken.cs
delete mode 100644 HttpClientStudy.WebApp/WeatherForecast.cs
diff --git a/HttpClientStudy.Model/Account.cs b/HttpClientStudy.Model/Account.cs
new file mode 100644
index 0000000..9beada5
--- /dev/null
+++ b/HttpClientStudy.Model/Account.cs
@@ -0,0 +1,23 @@
+namespace HttpClientStudy.Model
+{
+ ///
+ /// 账号
+ ///
+ public class Account
+ {
+ ///
+ /// Id
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// 姓名
+ ///
+ public string? Name { get; set; }
+
+ ///
+ /// 密码
+ ///
+ public string? Password { get; set; }
+ }
+}
diff --git a/HttpClientStudy.Model/Class1.cs b/HttpClientStudy.Model/Class1.cs
deleted file mode 100644
index 6a829c0..0000000
--- a/HttpClientStudy.Model/Class1.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace HttpClientStudy.Model
-{
- public class Class1
- {
-
- }
-}
diff --git a/HttpClientStudy.UnitTest/GlobalUsings.cs b/HttpClientStudy.UnitTest/GlobalUsings.cs
index 8c927eb..4cc2447 100644
--- a/HttpClientStudy.UnitTest/GlobalUsings.cs
+++ b/HttpClientStudy.UnitTest/GlobalUsings.cs
@@ -1 +1,8 @@
-global using Xunit;
\ No newline at end of file
+global using Xunit;
+
+global using HttpClientStudy.Model;
+global using HttpClientStudy.Core;
+global using HttpClientStudy.Service;
+global using HttpClientStudy.WebApp;
+global using HttpClientStudy.WebApp.Models;
+global using HttpClientStudy.WebApp.Controllers;
\ No newline at end of file
diff --git a/HttpClientStudy.UnitTest/HttpClientStudy.UnitTest.csproj b/HttpClientStudy.UnitTest/HttpClientStudy.UnitTest.csproj
index 33f9b28..01720e0 100644
--- a/HttpClientStudy.UnitTest/HttpClientStudy.UnitTest.csproj
+++ b/HttpClientStudy.UnitTest/HttpClientStudy.UnitTest.csproj
@@ -26,6 +26,7 @@
+
diff --git a/HttpClientStudy.UnitTest/UnitTest1.cs b/HttpClientStudy.UnitTest/UnitTest1.cs
deleted file mode 100644
index e307966..0000000
--- a/HttpClientStudy.UnitTest/UnitTest1.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-namespace HttpClientStudy.UnitTest
-{
- public class UnitTest1
- {
- [Fact]
- public void Test1()
- {
-
- }
- }
-}
\ No newline at end of file
diff --git a/HttpClientStudy.UnitTest/UseXunit.cs b/HttpClientStudy.UnitTest/UseXunit.cs
new file mode 100644
index 0000000..a1579ad
--- /dev/null
+++ b/HttpClientStudy.UnitTest/UseXunit.cs
@@ -0,0 +1,24 @@
+using Xunit.Abstractions;
+
+namespace HttpClientStudy.UnitTest
+{
+ ///
+ /// ʹ xUnit ԪԿ
+ ///
+ public class UseXunit
+ {
+ private readonly ITestOutputHelper _logger;
+
+ public UseXunit(ITestOutputHelper outputHelper)
+ {
+ _logger = outputHelper;
+ }
+
+ [Fact]
+ public void UseXunit_Test()
+ {
+ _logger.WriteLine("ʹ xUnit ԪԿܣ");
+ Assert.True(true,"ʹ xUnit");
+ }
+ }
+}
\ No newline at end of file
diff --git a/HttpClientStudy.UnitTest/WebApp/BaseResultTest.cs b/HttpClientStudy.UnitTest/WebApp/BaseResultTest.cs
new file mode 100644
index 0000000..d747455
--- /dev/null
+++ b/HttpClientStudy.UnitTest/WebApp/BaseResultTest.cs
@@ -0,0 +1,144 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using Xunit.Abstractions;
+
+namespace HttpClientStudy.UnitTest.WebApp
+{
+ public class BaseResultTest
+ {
+ private readonly ITestOutputHelper _logger;
+
+ public BaseResultTest(ITestOutputHelper outputHelper)
+ {
+ _logger = outputHelper;
+ }
+
+ [Fact]
+ public void New_BaseResult_Test()
+ {
+ var result = new BaseResult() { Code = 1, Message = "成功", Data = null };
+
+ Assert.NotNull(result);
+ Assert.Equal(1, result.Code);
+ Assert.Equal("成功", result.Message);
+ Assert.Null(result.Data);
+ }
+
+ [Fact]
+ public void New_BaseResult_Test2()
+ {
+ var result = new BaseResult() { Code = 0, Message = "失败", Data = new { Msg = "测试" } };
+
+ Assert.NotNull(result);
+ Assert.IsType(result);
+ Assert.Equal(0, result.Code);
+ Assert.Equal("失败", result.Message);
+ }
+
+ [Fact]
+ public void New_BaseResult_Test3()
+ {
+ var result = new BaseResult() { Code = 0, Message = "异常", Data = new Exception("异常") };
+
+ Assert.NotNull(result);
+ Assert.Equal(0, result.Code);
+ Assert.Equal("异常", result.Message);
+ Assert.IsType(result.Data);
+ }
+
+ [Fact]
+ public void New_Generic_BaseResult_Test()
+ {
+ var result = new BaseResult() { Code = 1, Message = "成功", Data = string.Empty };
+
+ Assert.NotNull(result);
+ Assert.Equal(1, result.Code);
+ Assert.Equal("成功", result.Message);
+ Assert.Equal(string.Empty, result.Data);
+ }
+
+ [Fact]
+ public void New_Generic_BaseResult_Create_Test()
+ {
+ var result = BaseResult.Create(string.Empty);
+
+ Assert.NotNull(result);
+ Assert.IsType(result.Data);
+ Assert.Equal(0, result.Code);
+ Assert.Equal("", result.Message);
+ Assert.Empty(result.Data);
+ }
+
+ [Fact]
+ public void BaseResultUtil_Default_Test()
+ {
+ var result = BaseResultUtil.Default();
+ Assert.NotNull(result);
+ Assert.Null(result.Data);
+ Assert.Equal(0, result.Code);
+ Assert.Equal("", result.Message);
+
+ var result2 = BaseResultUtil.Default();
+ Assert.NotNull(result2);
+ Assert.IsType(result2.Data);
+ Assert.Equal(0,result2.Data);
+ Assert.Equal(0, result2.Code);
+ Assert.Equal("", result2.Message);
+
+
+ var result3 = BaseResultUtil.Default(new { Name="匿名类"});
+ Assert.NotNull(result);
+ Assert.IsType(result3.Data!.GetType(),result3.Data);
+ Assert.Equal("匿名类",result3.Data!.Name);
+ Assert.Equal(0, result2.Code);
+ Assert.Equal("", result2.Message);
+ }
+
+ [Fact]
+ public void BaseResultUtil_Success_Test()
+ {
+ var result = BaseResultUtil.Success();
+ Assert.NotNull(result);
+ Assert.Null(result.Data);
+ Assert.Equal(0, result.Code);
+ Assert.Equal("", result.Message);
+
+ var result2 = BaseResultUtil.Success();
+ Assert.NotNull(result2);
+ Assert.IsType(result2.Data);
+ Assert.Equal(0, result2.Data);
+ Assert.Equal(0, result2.Code);
+ Assert.Equal("", result2.Message);
+
+
+ var result3 = BaseResultUtil.Success(new { Name = "匿名类" },1,"成功");
+ Assert.NotNull(result);
+ Assert.IsType(result3.Data!.GetType(), result3.Data);
+ Assert.Equal("匿名类", result3.Data!.Name);
+ Assert.Equal(0, result2.Code);
+ Assert.Equal("", result2.Message);
+ }
+
+ [Fact]
+ public void BaseResultUtil_Error_Test()
+ {
+
+ }
+
+ [Fact]
+ public void BaseResultUtil_Fail_Test()
+ {
+
+ }
+
+ [Fact]
+ public void BaseResultUtil_Exception_Test()
+ {
+
+ }
+ }
+}
diff --git a/HttpClientStudy.WebApp/BaseResult.cs b/HttpClientStudy.WebApp/BaseResult.cs
new file mode 100644
index 0000000..d39f4ce
--- /dev/null
+++ b/HttpClientStudy.WebApp/BaseResult.cs
@@ -0,0 +1,120 @@
+namespace HttpClientStudy.WebApp
+{
+ ///
+ /// API 返回基类
+ ///
+ public class BaseResult
+ {
+ ///
+ /// 接口返回代码
+ ///
+ public int Code { get; set; }
+
+ ///
+ ///
+ /// 接口返回说明信息
+ ///
+ public string? Message { get; set; }
+
+ ///
+ /// 接口返回数据
+ ///
+ public object? Data { get; set; } = string.Empty;
+ }
+
+ ///
+ /// API 泛型返回基类
+ ///
+ ///
+ public class BaseResult : BaseResult
+ {
+ public static BaseResult Create(T? data = default, int code = 0, string message = "")
+ {
+ return new BaseResult { Data = data, Code = code, Message = message };
+ }
+
+ public new T? Data { get; set; }
+ }
+
+ ///
+ /// API返回基类 工具类
+ ///
+ public static class BaseResultUtil
+ {
+ public static BaseResult Create(TData data, int code = 0, string message = "")
+ {
+ return new BaseResult() { Data = data, Code = code, Message = message };
+ }
+
+ public static BaseResult Success()
+ {
+ return Success(default, 1, "成功");
+ //return new BaseResult() { Data = default, Code = 1, Message = "成功" };
+ }
+
+ public static BaseResult Success(TData data)
+ {
+ return new BaseResult() { Data = data, Code = 1, Message = "成功" };
+ }
+
+ public static BaseResult Success(TData data, string message)
+ {
+ return new BaseResult() { Data = data, Code = 1, Message = message };
+ }
+
+ public static BaseResult Success(TData data, int code, string message)
+ {
+ return new BaseResult() { Data = data, Code = code, Message = message };
+ }
+
+ public static BaseResult Error()
+ {
+ return new BaseResult() { Data = default, Code = 0, Message = "错误" };
+ }
+
+ public static BaseResult Error(TData data, string message = "错误")
+ {
+ return new BaseResult() { Data = data, Code = 0, Message = "错误" };
+ }
+
+ public static BaseResult Error(TData data, int code = 0, string message = "错误")
+ {
+ return new BaseResult() { Data = data, Code = 0, Message = "错误" };
+ }
+
+ public static BaseResult Fail() where TData : class
+ {
+ return new BaseResult() { Data = default, Code = 0, Message = "失败" };
+ }
+
+ public static BaseResult Fail(TData data, string message = "失败")
+ {
+ return new BaseResult() { Data = data, Code = 0, Message = "失败" };
+ }
+
+ public static BaseResult Fail(TData data, int code = 0, string message = "失败")
+ {
+ return new BaseResult() { Data = data, Code = 0, Message = "失败" };
+ }
+
+ public static BaseResult Exception(Exception ex)
+ {
+ return new BaseResult() { Data = default, Code = 0, Message = $"异常:{ex.Message}" };
+ }
+
+ public static BaseResult Exception(Exception ex, TData data)
+ {
+ return new BaseResult() { Data = data, Code = 0, Message = $"异常:{ex.Message}" };
+ }
+
+ public static BaseResult Exception(Exception ex, TData data, int code = 0)
+ {
+ return new BaseResult() { Data = data, Code = code, Message = $"异常:{ex.Message}" };
+ }
+
+ public static BaseResult Default(TData? data = default)
+ {
+ return new BaseResult() { Code = 0, Message = "", Data = data };
+ }
+ }
+}
diff --git a/HttpClientStudy.WebApp/Controllers/AccountController.cs b/HttpClientStudy.WebApp/Controllers/AccountController.cs
new file mode 100644
index 0000000..feee841
--- /dev/null
+++ b/HttpClientStudy.WebApp/Controllers/AccountController.cs
@@ -0,0 +1,38 @@
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+
+namespace HttpClientStudy.WebApp.Controllers
+{
+ [Route("api/[controller]/[action]")]
+ [ApiController]
+ public class AccountController : ControllerBase
+ {
+ public AccountController() { }
+
+ ///
+ /// Ping 测试接口
+ ///
+ ///
+ /// Ping
+ ///
+ ///
+ [HttpGet]
+ public IActionResult Ping()
+ {
+
+ return Ok("pong");
+ }
+
+ ///
+ /// 获取Token
+ ///
+ ///
+ [AllowAnonymous]
+ [HttpGet]
+ public IActionResult GetToken()
+ {
+ return new JsonResult(new { Code = 1, Message = "", Token = "a.b.c" });
+ }
+ }
+}
diff --git a/HttpClientStudy.WebApp/Controllers/WeatherForecastController.cs b/HttpClientStudy.WebApp/Controllers/WeatherForecastController.cs
deleted file mode 100644
index 34bcdec..0000000
--- a/HttpClientStudy.WebApp/Controllers/WeatherForecastController.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-
-namespace HttpClientStudy.WebApp.Controllers
-{
- [ApiController]
- [Route("[controller]")]
- public class WeatherForecastController : ControllerBase
- {
- private static readonly string[] Summaries = new[]
- {
- "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
- };
-
- private readonly ILogger _logger;
-
- public WeatherForecastController(ILogger logger)
- {
- _logger = logger;
- }
-
- [HttpGet(Name = "GetWeatherForecast")]
- public IEnumerable Get()
- {
- return Enumerable.Range(1, 5).Select(index => new WeatherForecast
- {
- Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
- TemperatureC = Random.Shared.Next(-20, 55),
- Summary = Summaries[Random.Shared.Next(Summaries.Length)]
- })
- .ToArray();
- }
- }
-}
diff --git a/HttpClientStudy.WebApp/Models/UserForToken.cs b/HttpClientStudy.WebApp/Models/UserForToken.cs
new file mode 100644
index 0000000..f543136
--- /dev/null
+++ b/HttpClientStudy.WebApp/Models/UserForToken.cs
@@ -0,0 +1,23 @@
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+
+namespace HttpClientStudy.WebApp.Models
+{
+ ///
+ /// 获取Token 请求类
+ ///
+ public class UserForToken
+ {
+ ///
+ /// 账号
+ ///
+ [Required]
+ public required string Account { get; set; }
+
+ ///
+ /// 密码
+ ///
+ [Required]
+ public required string Password { get; set; }
+ }
+}
diff --git a/HttpClientStudy.WebApp/Properties/launchSettings.json b/HttpClientStudy.WebApp/Properties/launchSettings.json
index 09a0d0c..a664898 100644
--- a/HttpClientStudy.WebApp/Properties/launchSettings.json
+++ b/HttpClientStudy.WebApp/Properties/launchSettings.json
@@ -9,7 +9,7 @@
}
},
"profiles": {
- "http": {
+ "WebApp": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
diff --git a/HttpClientStudy.WebApp/WeatherForecast.cs b/HttpClientStudy.WebApp/WeatherForecast.cs
deleted file mode 100644
index 36cc3e2..0000000
--- a/HttpClientStudy.WebApp/WeatherForecast.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-namespace HttpClientStudy.WebApp
-{
- public class WeatherForecast
- {
- public DateOnly Date { get; set; }
-
- public int TemperatureC { get; set; }
-
- public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
-
- public string? Summary { get; set; }
- }
-}