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; } - } -}