forked from ddrilling/AsbCloudServer
CS2-117, CS2-112
Add exception handle middleware. Move middlawares into separate files.
This commit is contained in:
parent
fccfd538fc
commit
fd74ae20a0
@ -36,8 +36,8 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
},
|
},
|
||||||
|
|
||||||
Scopes = new[] { DriveService.Scope.Drive },
|
Scopes = new[] { DriveService.Scope.Drive },
|
||||||
DataStore = new FileDataStore(applicationName),
|
DataStore = new FileDataStore(applicationName),//TODO: replace FileDataStore by thread safe static datastore service
|
||||||
});
|
});
|
||||||
|
|
||||||
public GoogleDriveService()
|
public GoogleDriveService()
|
||||||
{
|
{
|
||||||
|
54
AsbCloudWebApi/Middlewares/RequerstTrackerMiddleware.cs
Normal file
54
AsbCloudWebApi/Middlewares/RequerstTrackerMiddleware.cs
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
using Microsoft.AspNetCore.Http;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace AsbCloudWebApi.Middlewares
|
||||||
|
{
|
||||||
|
public class RequerstTrackerMiddleware
|
||||||
|
{
|
||||||
|
private readonly RequestDelegate next;
|
||||||
|
|
||||||
|
public RequerstTrackerMiddleware(RequestDelegate next)
|
||||||
|
{
|
||||||
|
this.next = next;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task InvokeAsync(HttpContext context)
|
||||||
|
{
|
||||||
|
var service = context.RequestServices.GetRequiredService<AsbCloudApp.Services.IRequerstTrackerService>();
|
||||||
|
var requestLog = new AsbCloudApp.Data.RequestLogDto
|
||||||
|
{
|
||||||
|
UserLogin = context.User?.Identity.Name,
|
||||||
|
UserIp = context.Connection.RemoteIpAddress.ToString(),
|
||||||
|
RequestMethod = context.Request.Method,
|
||||||
|
RequestPath = context.Request.Path.Value,
|
||||||
|
Referer = context.Request.Headers["Referer"].ToString(),
|
||||||
|
};
|
||||||
|
{
|
||||||
|
var userIdString = context.User?.FindFirst("id")?.Value;
|
||||||
|
if (!string.IsNullOrEmpty(userIdString) && int.TryParse(userIdString, out int userId))
|
||||||
|
requestLog.UserId = userId;
|
||||||
|
}
|
||||||
|
var sw = System.Diagnostics.Stopwatch.StartNew();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await next?.Invoke(context);
|
||||||
|
sw.Stop();
|
||||||
|
requestLog.ElapsedMilliseconds = sw.ElapsedMilliseconds;
|
||||||
|
requestLog.Status = context.Response.StatusCode;
|
||||||
|
service.RegisterRequest(requestLog);
|
||||||
|
}
|
||||||
|
catch (System.Exception ex)
|
||||||
|
{
|
||||||
|
sw.Stop();
|
||||||
|
requestLog.ElapsedMilliseconds = sw.ElapsedMilliseconds;
|
||||||
|
requestLog.Status = context.Response.StatusCode;
|
||||||
|
service.RegisterRequestError(requestLog, ex);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
35
AsbCloudWebApi/Middlewares/SimplifyExceptionsMiddleware.cs
Normal file
35
AsbCloudWebApi/Middlewares/SimplifyExceptionsMiddleware.cs
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
using Microsoft.AspNetCore.Http;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace AsbCloudWebApi.Middlewares
|
||||||
|
{
|
||||||
|
public class SimplifyExceptionsMiddleware
|
||||||
|
{
|
||||||
|
private readonly RequestDelegate next;
|
||||||
|
|
||||||
|
public SimplifyExceptionsMiddleware(RequestDelegate next)
|
||||||
|
{
|
||||||
|
this.next = next;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task InvokeAsync(HttpContext context)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await next?.Invoke(context);
|
||||||
|
}
|
||||||
|
catch (TaskCanceledException ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine(ex.Message);
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
if (ex.Message.Contains("Reading the request body timed out due to data arriving too slowly. See MinRequestBodyDataRate."))
|
||||||
|
Console.WriteLine("Reading the request body timed out due to data arriving too slowly.");
|
||||||
|
else
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,5 @@
|
|||||||
using AsbCloudInfrastructure;
|
using AsbCloudInfrastructure;
|
||||||
|
using AsbCloudWebApi.Middlewares;
|
||||||
using AsbCloudWebApi.SignalR;
|
using AsbCloudWebApi.SignalR;
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
@ -80,40 +81,8 @@ namespace AsbCloudWebApi
|
|||||||
app.UseAuthentication();
|
app.UseAuthentication();
|
||||||
app.UseAuthorization();
|
app.UseAuthorization();
|
||||||
|
|
||||||
app.Use(async (context, next) => {
|
app.UseMiddleware<SimplifyExceptionsMiddleware>();
|
||||||
|
app.UseMiddleware<RequerstTrackerMiddleware>();
|
||||||
var service = context.RequestServices.GetRequiredService<AsbCloudApp.Services.IRequerstTrackerService>();
|
|
||||||
var requestLog = new AsbCloudApp.Data.RequestLogDto
|
|
||||||
{
|
|
||||||
UserLogin = context.User?.Identity.Name,
|
|
||||||
UserIp = context.Connection.RemoteIpAddress.ToString(),
|
|
||||||
RequestMethod = context.Request.Method,
|
|
||||||
RequestPath = context.Request.Path.Value,
|
|
||||||
Referer = context.Request.Headers["Referer"].ToString(),
|
|
||||||
};
|
|
||||||
{
|
|
||||||
var userIdString = context.User?.FindFirst("id")?.Value;
|
|
||||||
if (!string.IsNullOrEmpty(userIdString) && int.TryParse(userIdString, out int userId))
|
|
||||||
requestLog.UserId = userId;
|
|
||||||
}
|
|
||||||
var sw = System.Diagnostics.Stopwatch.StartNew();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
await next?.Invoke();
|
|
||||||
sw.Stop();
|
|
||||||
requestLog.ElapsedMilliseconds = sw.ElapsedMilliseconds;
|
|
||||||
requestLog.Status = context.Response.StatusCode;
|
|
||||||
service.RegisterRequest(requestLog);
|
|
||||||
}
|
|
||||||
catch(System.Exception ex)
|
|
||||||
{
|
|
||||||
sw.Stop();
|
|
||||||
requestLog.ElapsedMilliseconds = sw.ElapsedMilliseconds;
|
|
||||||
requestLog.Status = context.Response.StatusCode;
|
|
||||||
service.RegisterRequestError(requestLog, ex);
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
app.UseEndpoints(endpoints =>
|
app.UseEndpoints(endpoints =>
|
||||||
{
|
{
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using AsbCloudDb.Model;
|
||||||
using Google.Apis.Drive.v3.Data;
|
using Google.Apis.Drive.v3.Data;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace ConsoleApp1
|
namespace ConsoleApp1
|
||||||
{
|
{
|
||||||
@ -15,25 +18,11 @@ namespace ConsoleApp1
|
|||||||
{
|
{
|
||||||
static void Main(/*string[] args*/)
|
static void Main(/*string[] args*/)
|
||||||
{
|
{
|
||||||
var service = new GoogleDriveService();
|
var d = "20211102_173407926";
|
||||||
|
var dt = DateTime.ParseExact("20211102_173407926",
|
||||||
//var files = serviceWrapper.GetAllFiles();
|
"yyyyMMdd_HHmmssfff",
|
||||||
|
CultureInfo.InvariantCulture);
|
||||||
// foreach (var file in files)
|
Console.ReadKey();
|
||||||
// {
|
|
||||||
// var permission = new Permission() { Type = "anyone", Role = "reader"};
|
|
||||||
// var createRequest = service.Permissions.Create(permission, file.Id);
|
|
||||||
// createRequest.Execute();
|
|
||||||
// Console.WriteLine(file.WebViewLink);
|
|
||||||
// }
|
|
||||||
|
|
||||||
var path = "/home/cult/First.xlsx";
|
|
||||||
var fileInfo = new FileInfo(path);
|
|
||||||
var fileStream = System.IO.File.Open(path, FileMode.Open);
|
|
||||||
var uploadedFileId = service.UploadFile(fileStream, fileInfo.Name, "", "uploaded");
|
|
||||||
service.CreatePublicPermissionForFile(uploadedFileId);
|
|
||||||
var webLink = service.GetFileWebLink(uploadedFileId);
|
|
||||||
Console.WriteLine(webLink);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user