Browse Source

部分接口限制版本

updatebug
shanji 2 years ago
parent
commit
2afddc36f1
  1. 4
      BBWYB.Client/APIServices/BaseApiService.cs
  2. 8
      BBWYB.Client/GlobalContext.cs
  3. 2
      BBWYB.Client/Views/MainWindow.xaml
  4. 55
      BBWYB.Server.API/Middlewares/ClientVersionValidationMiddleWare.cs
  5. 2
      BBWYB.Server.API/Program.cs
  6. 9
      BBWYB.Server.API/appsettings.json

4
BBWYB.Client/APIServices/BaseApiService.cs

@ -32,9 +32,9 @@ namespace BBWYB.Client.APIServices
if (headers == null) if (headers == null)
headers = new Dictionary<string, string>(); headers = new Dictionary<string, string>();
if (!headers.ContainsKey("ClientCode")) if (!headers.ContainsKey("ClientCode"))
headers.Add("ClientCode", "BBWY"); headers.Add("ClientCode", "BBWYB");
if (!headers.ContainsKey("ClientVersion")) if (!headers.ContainsKey("ClientVersion"))
headers.Add("ClientVersion", "1.0.0.0"); headers.Add("ClientVersion", globalContext.BBWYBApiVersion);
if (!headers.ContainsKey("Authorization") && !string.IsNullOrEmpty(globalContext.UserToken)) if (!headers.ContainsKey("Authorization") && !string.IsNullOrEmpty(globalContext.UserToken))
headers.Add("Authorization", $"Bearer {globalContext.UserToken}"); headers.Add("Authorization", $"Bearer {globalContext.UserToken}");
if (!headers.ContainsKey("qy")) if (!headers.ContainsKey("qy"))

8
BBWYB.Client/GlobalContext.cs

@ -13,6 +13,7 @@ namespace BBWYB.Client
{ {
public GlobalContext() public GlobalContext()
{ {
BBWYBApiVersion = "10018";
} }
private User user; private User user;
@ -35,10 +36,17 @@ namespace BBWYB.Client
public string BBWYCApiHost { get; set; } public string BBWYCApiHost { get; set; }
public string QKApiHost { get; set; } public string QKApiHost { get; set; }
public string BBWYBApiVersion { get; set; }
public string GetUserString() public string GetUserString()
{ {
return JsonConvert.SerializeObject(User); return JsonConvert.SerializeObject(User);
} }
public string GetBBWYBApiVersion()
{
return BBWYBApiVersion;
}
#endregion #endregion
} }
} }

2
BBWYB.Client/Views/MainWindow.xaml

@ -24,7 +24,7 @@
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="10,0,0,0"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="10,0,0,0">
<TextBlock Text="{Binding GlobalContext.User.Name}"/> <TextBlock Text="{Binding GlobalContext.User.Name}"/>
<TextBlock Text="{Binding GlobalContext.User.Shop.ShopName}" Margin="5,0,0,0"/> <TextBlock Text="{Binding GlobalContext.User.Shop.ShopName}" Margin="5,0,0,0"/>
<TextBlock Text="v10017" Margin="5,0,0,0"/> <TextBlock Text="{Binding GlobalContext.BBWYBApiVersion}" Margin="5,0,0,0"/>
</StackPanel> </StackPanel>
</Border> </Border>
<Grid Grid.Row="1"> <Grid Grid.Row="1">

55
BBWYB.Server.API/Middlewares/ClientVersionValidationMiddleWare.cs

@ -0,0 +1,55 @@
using BBWYB.Common.Models;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;
namespace BBWYB.Server.API.Middlewares
{
public class ClientVersionValidationMiddleWare
{
/// <summary>
/// 管道请求委托
/// </summary>
private RequestDelegate _next;
private IDictionary<string, int> apiVersionDictionary;
private IOptionsMonitor<List<ClientVersionValidationModel>> _monitor;
public ClientVersionValidationMiddleWare(RequestDelegate requestDelegate, IOptionsMonitor<List<ClientVersionValidationModel>> monitor)
{
_next = requestDelegate;
_monitor = monitor;
apiVersionDictionary = new Dictionary<string, int>();
}
public async Task Invoke(HttpContext context)
{
try
{
Console.WriteLine(context.Request.Path);
var apiRequirement = _monitor.CurrentValue.FirstOrDefault(x => x.Api.Equals(context.Request.Path, StringComparison.CurrentCultureIgnoreCase));
if (apiRequirement != null)
{
if (!context.Request.Headers.TryGetValue("ClientVersion", out StringValues clientVersionStr))
throw new BusinessException("未读取到ClientVersion");
if (!int.TryParse(clientVersionStr, out int clientVersion))
throw new BusinessException("非法ClientVersion");
if (clientVersion < apiRequirement.MinimumVersion)
throw new BusinessException("当前ClientVersion低于接口最低要求,请升级到最新版");
}
await _next(context); //调用管道执行下一个中间件
}
catch
{
throw;
}
}
}
public class ClientVersionValidationModel
{
public string Api { get; set; }
public int MinimumVersion { get; set; }
}
}

2
BBWYB.Server.API/Program.cs

@ -63,6 +63,7 @@ services.AddSingleton<OP_PlatformClientFactory>();
services.AddSingleton<PP_PlatformClientFactory>(); services.AddSingleton<PP_PlatformClientFactory>();
services.AddSingleton<ExpressCompanyNameConverter>(); services.AddSingleton<ExpressCompanyNameConverter>();
services.AddMapper(new MappingProfiles()); services.AddMapper(new MappingProfiles());
services.Configure<List<ClientVersionValidationModel>>(configuration.GetSection("ApiVersionRequirements"));
services.AddControllers(c => services.AddControllers(c =>
{ {
@ -164,6 +165,7 @@ if (isAllowedSwagger)
} }
//app.UseHttpsRedirection(); //app.UseHttpsRedirection();
app.UseMiddleware<CustomExceptionMiddleWare>(); app.UseMiddleware<CustomExceptionMiddleWare>();
app.UseMiddleware<ClientVersionValidationMiddleWare>();
app.UseRouting(); app.UseRouting();
app.UseCors("cors"); app.UseCors("cors");
app.UseAuthorization(); app.UseAuthorization();

9
BBWYB.Server.API/appsettings.json

@ -13,5 +13,12 @@
"MDSDB": "data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=mds;charset=utf8;sslmode=none;" "MDSDB": "data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=mds;charset=utf8;sslmode=none;"
}, },
"AllowedSwagger": true, "AllowedSwagger": true,
"Secret": "D96BFA5B-F2AF-45BC-9342-5A55C3F9BBB0" "Secret": "D96BFA5B-F2AF-45BC-9342-5A55C3F9BBB0",
//ApiVersionRequirements
"ApiVersionRequirements": [
{
"Api": "/api/purchaseOrder/createpurchaseorder",
"MinimumVersion": 10017
}
]
} }

Loading…
Cancel
Save