parent
dc1aa3b09f
commit
14e7f75512
|
|
@ -180,7 +180,6 @@ namespace Waste.Application
|
|||
}
|
||||
var typeHex = Convert.ToHexString(typeBytes);
|
||||
myPackage.Area = Convert.ToInt32(typeHex, 16).ToString();
|
||||
//十六进制转10进制
|
||||
}
|
||||
//000F000002.16进制
|
||||
var areaHex = Convert.ToHexString(areaBytes);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,99 @@
|
|||
using Microsoft.AspNetCore.Http;
|
||||
using Serilog;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Waste.Core
|
||||
{
|
||||
public static class LoggerHelper
|
||||
{
|
||||
public static void EnrichFromRequest(IDiagnosticContext diagnosticContext, HttpContext httpContext)
|
||||
{
|
||||
var request = httpContext.Request;
|
||||
|
||||
// Set all the common properties available for every request
|
||||
diagnosticContext.Set("Host", request.Host);
|
||||
diagnosticContext.Set("Scheme", request.Scheme);
|
||||
|
||||
// Only set it if available. You're not sending sensitive data in a querystring right?!
|
||||
if (request.QueryString.HasValue)
|
||||
{
|
||||
diagnosticContext.Set("QueryString", request.QueryString.Value);
|
||||
}
|
||||
string ip = string.Empty;
|
||||
if (request.Headers.ContainsKey("X-Real-IP"))
|
||||
{
|
||||
ip = request.Headers["X-Real-IP"].ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
ip = httpContext.Connection.RemoteIpAddress.ToString();
|
||||
}
|
||||
if (!string.IsNullOrEmpty(ip))
|
||||
{
|
||||
diagnosticContext.Set("IP", ip);
|
||||
}
|
||||
if (!string.IsNullOrEmpty(request.Headers["token"].ToString()))
|
||||
{
|
||||
diagnosticContext.Set("token", request.Headers["token"].ToString());
|
||||
}
|
||||
if (!string.IsNullOrEmpty(request.Headers["Authorization"].ToString()))
|
||||
{
|
||||
diagnosticContext.Set("Authorization", request.Headers["Authorization"].ToString());
|
||||
}
|
||||
if (!string.IsNullOrEmpty(request.Headers["X-Authorization"].ToString()))
|
||||
{
|
||||
diagnosticContext.Set("X-Authorization", request.Headers["X-Authorization"].ToString());
|
||||
}
|
||||
if (!string.IsNullOrEmpty(request.Headers["User-Agent"].ToString()))
|
||||
{
|
||||
diagnosticContext.Set("User-Agent", request.Headers["User-Agent"].ToString());
|
||||
}
|
||||
if (request.Method == "POST" && request.ContentLength > 0)
|
||||
{
|
||||
if (httpContext.RequestAborted.IsCancellationRequested)
|
||||
{
|
||||
diagnosticContext.Set("postdata", "用户取消了操作");
|
||||
}
|
||||
else
|
||||
{
|
||||
string postdata = string.Empty;
|
||||
try
|
||||
{
|
||||
if (request.Body.Length > 0)
|
||||
{
|
||||
request.EnableBuffering();
|
||||
request.Body.Position = 0;
|
||||
using (var sr = new StreamReader(request.Body))
|
||||
{
|
||||
postdata = Task.Factory.StartNew(sr.ReadToEndAsync, TaskCreationOptions.LongRunning)
|
||||
.GetAwaiter().GetResult().Result;
|
||||
// postdata = await sr.ReadToEndAsync();
|
||||
}
|
||||
if (!string.IsNullOrEmpty(postdata))
|
||||
{
|
||||
diagnosticContext.Set("PostData", postdata);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
// Set the content-type of the Response at this point
|
||||
diagnosticContext.Set("ContentType", httpContext.Response.ContentType);
|
||||
|
||||
// Retrieve the IEndpointFeature selected for the request
|
||||
var endpoint = httpContext.GetEndpoint();
|
||||
if (endpoint is object) // endpoint != null
|
||||
{
|
||||
diagnosticContext.Set("EndpointName", endpoint.DisplayName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -15,11 +15,11 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Furion" Version="2.7.9" />
|
||||
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="2.7.9" />
|
||||
<PackageReference Include="Furion.Extras.DatabaseAccessor.SqlSugar" Version="2.7.9" />
|
||||
<PackageReference Include="Furion.Extras.Logging.Serilog" Version="2.7.9" />
|
||||
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="2.7.9" />
|
||||
<PackageReference Include="Furion" Version="2.15.10" />
|
||||
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="2.15.10" />
|
||||
<PackageReference Include="Furion.Extras.DatabaseAccessor.SqlSugar" Version="2.15.10" />
|
||||
<PackageReference Include="Furion.Extras.Logging.Serilog" Version="2.15.10" />
|
||||
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="2.15.10" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
using Furion.DataValidation;
|
||||
using Furion.DependencyInjection;
|
||||
using Furion.UnifyResult;
|
||||
using Furion.UnifyResult.Internal;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.Filters;
|
||||
|
|
@ -16,18 +17,22 @@ namespace Waste.Web.Core
|
|||
/// <summary>
|
||||
/// RESTFUL 风格返回值
|
||||
/// </summary>
|
||||
[SkipScan, UnifyModel(typeof(RESTfulResult<>))]
|
||||
[SuppressSniffer, UnifyModel(typeof(RESTfulResult<>))]
|
||||
public class RESTfulResultProvider : IUnifyResultProvider
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 异常返回值
|
||||
/// </summary>
|
||||
/// <param name="context"></param>
|
||||
/// <param name="metadata"></param>
|
||||
/// <returns></returns>
|
||||
public IActionResult OnException(ExceptionContext context)
|
||||
public IActionResult OnException(ExceptionContext context, ExceptionMetadata metadata)
|
||||
{
|
||||
//解析异常信息
|
||||
var (StatusCode, ErrorCode, Errors) = UnifyContext.GetExceptionMetadata(context);
|
||||
var ErrorCode = metadata.ErrorCode;
|
||||
var StatusCode = metadata.StatusCode;
|
||||
var Errors = metadata.Errors;
|
||||
object data;
|
||||
// 处理内容结果
|
||||
if (context.Result is ContentResult contentResult) data = contentResult.Content;
|
||||
|
|
@ -50,10 +55,12 @@ namespace Waste.Web.Core
|
|||
/// </summary>
|
||||
/// <param name="context"></param>
|
||||
/// <param name="statusCode"></param>
|
||||
/// <param name="options"></param>
|
||||
/// <param name="unifyResultSettings"></param>
|
||||
/// <returns></returns>
|
||||
public async Task OnResponseStatusCodes(HttpContext context, int statusCode, UnifyResultStatusCodesOptions options = null)
|
||||
public async Task OnResponseStatusCodes(HttpContext context, int statusCode, UnifyResultSettingsOptions unifyResultSettings)
|
||||
{
|
||||
// 设置响应状态码
|
||||
UnifyContext.SetResponseStatusCodes(context, statusCode, unifyResultSettings);
|
||||
switch (statusCode)
|
||||
{
|
||||
// 处理 401 状态码
|
||||
|
|
@ -90,10 +97,10 @@ namespace Waste.Web.Core
|
|||
/// 成功返回值
|
||||
/// </summary>
|
||||
/// <param name="context"></param>
|
||||
/// <param name="data"></param>
|
||||
/// <returns></returns>
|
||||
public IActionResult OnSucceeded(ActionExecutedContext context)
|
||||
public IActionResult OnSucceeded(ActionExecutedContext context, object data)
|
||||
{
|
||||
object data;
|
||||
// 处理内容结果
|
||||
if (context.Result is ContentResult contentResult) data = contentResult.Content;
|
||||
// 处理对象结果
|
||||
|
|
@ -115,18 +122,26 @@ namespace Waste.Web.Core
|
|||
/// 验证失败返回值
|
||||
/// </summary>
|
||||
/// <param name="context"></param>
|
||||
/// <param name="modelStates"></param>
|
||||
/// <param name="validationResults"></param>
|
||||
/// <param name="validateFailedMessage"></param>
|
||||
/// <param name="metadata"></param>
|
||||
/// <returns></returns>
|
||||
public IActionResult OnValidateFailed(ActionExecutingContext context, ModelStateDictionary modelStates, IEnumerable<ValidateFailedModel> validationResults, string validateFailedMessage)
|
||||
public IActionResult OnValidateFailed(ActionExecutingContext context, ValidationMetadata metadata)
|
||||
{
|
||||
var msg = "发生错误";
|
||||
var validationResults = metadata.ValidationResult;
|
||||
if (validationResults != null && validationResults.Count() > 0)
|
||||
{
|
||||
var messages = validationResults.FirstOrDefault().Value;
|
||||
if (messages.Length > 0)
|
||||
{
|
||||
msg = messages[0];
|
||||
}
|
||||
}
|
||||
return new JsonResult(new RESTfulResult<object>
|
||||
{
|
||||
StatusCode = StatusCodes.Status400BadRequest,
|
||||
Succeeded = false,
|
||||
Data = null,
|
||||
Errors = validationResults,
|
||||
Errors = msg,
|
||||
Extras = UnifyContext.Take(),
|
||||
Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
|
||||
});
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ using Nirvana.Common;
|
|||
using Serilog;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using Waste.Core;
|
||||
|
||||
namespace Waste.Web.Core
|
||||
{
|
||||
|
|
@ -68,7 +69,9 @@ namespace Waste.Web.Core
|
|||
app.UseHttpsRedirection();
|
||||
|
||||
app.UseStaticFiles();
|
||||
app.UseSerilogRequestLogging(); //记录请求日志,必须在 UseStaticFiles 和 UseRouting 之间
|
||||
app.UseSerilogRequestLogging(opts => {
|
||||
opts.EnrichDiagnosticContext = LoggerHelper.EnrichFromRequest;
|
||||
}); // 必须在 UseStaticFiles 和 UseRouting 之间,记录请求日志
|
||||
app.UseRouting();
|
||||
|
||||
app.UseCorsAccessor();
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.5" />
|
||||
<PackageReference Include="Serilog.Sinks.Seq" Version="5.0.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -88,37 +88,37 @@
|
|||
RESTFUL 风格返回值
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Waste.Web.Core.RESTfulResultProvider.OnException(Microsoft.AspNetCore.Mvc.Filters.ExceptionContext)">
|
||||
<member name="M:Waste.Web.Core.RESTfulResultProvider.OnException(Microsoft.AspNetCore.Mvc.Filters.ExceptionContext,Furion.UnifyResult.Internal.ExceptionMetadata)">
|
||||
<summary>
|
||||
异常返回值
|
||||
</summary>
|
||||
<param name="context"></param>
|
||||
<param name="metadata"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Waste.Web.Core.RESTfulResultProvider.OnResponseStatusCodes(Microsoft.AspNetCore.Http.HttpContext,System.Int32,Furion.UnifyResult.UnifyResultStatusCodesOptions)">
|
||||
<member name="M:Waste.Web.Core.RESTfulResultProvider.OnResponseStatusCodes(Microsoft.AspNetCore.Http.HttpContext,System.Int32,Furion.UnifyResult.UnifyResultSettingsOptions)">
|
||||
<summary>
|
||||
处理输出状态码
|
||||
</summary>
|
||||
<param name="context"></param>
|
||||
<param name="statusCode"></param>
|
||||
<param name="options"></param>
|
||||
<param name="unifyResultSettings"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Waste.Web.Core.RESTfulResultProvider.OnSucceeded(Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext)">
|
||||
<member name="M:Waste.Web.Core.RESTfulResultProvider.OnSucceeded(Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext,System.Object)">
|
||||
<summary>
|
||||
成功返回值
|
||||
</summary>
|
||||
<param name="context"></param>
|
||||
<param name="data"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Waste.Web.Core.RESTfulResultProvider.OnValidateFailed(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext,Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary,System.Collections.Generic.IEnumerable{Furion.DataValidation.ValidateFailedModel},System.String)">
|
||||
<member name="M:Waste.Web.Core.RESTfulResultProvider.OnValidateFailed(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext,Furion.DataValidation.ValidationMetadata)">
|
||||
<summary>
|
||||
验证失败返回值
|
||||
</summary>
|
||||
<param name="context"></param>
|
||||
<param name="modelStates"></param>
|
||||
<param name="validationResults"></param>
|
||||
<param name="validateFailedMessage"></param>
|
||||
<param name="metadata"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
</members>
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ namespace Waste.Web.Entry
|
|||
new string('-', 50);//输出模板
|
||||
///1.输出所有restrictedToMinimumLevel:LogEventLevel类型
|
||||
config
|
||||
.WriteTo.Seq("http://localhost:5341/")
|
||||
//.MinimumLevel.Debug() // 所有Sink的最小记录级别
|
||||
//.MinimumLevel.Override("Microsoft", LogEventLevel.Fatal)
|
||||
//.Enrich.FromLogContext()
|
||||
|
|
|
|||
|
|
@ -5,6 +5,6 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
|
|||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<_PublishTargetUrl>D:\webpublish\waste.ybhdmob.com</_PublishTargetUrl>
|
||||
<History>True|2021-07-29T11:06:09.1449349Z;True|2021-06-11T08:16:29.9542894+08:00;True|2021-06-04T14:46:02.2707457+08:00;True|2021-06-02T15:08:52.8245632+08:00;True|2021-06-02T15:05:50.3614099+08:00;True|2021-06-02T14:59:32.3690948+08:00;True|2021-06-02T14:10:25.1182836+08:00;True|2021-06-02T14:09:54.9215833+08:00;True|2021-06-01T10:41:54.9488501+08:00;True|2021-06-01T10:38:56.0283198+08:00;True|2021-05-28T13:59:02.2308877+08:00;True|2021-05-28T11:56:26.6796406+08:00;True|2021-05-28T11:28:00.4087907+08:00;True|2021-05-27T16:18:09.5993838+08:00;True|2021-05-27T16:07:31.3484951+08:00;True|2021-05-27T11:30:37.9119310+08:00;True|2021-05-27T11:28:35.5374674+08:00;True|2021-05-27T08:00:09.1625592+08:00;True|2021-05-26T20:42:17.0852150+08:00;True|2021-05-26T20:36:49.7527415+08:00;True|2021-05-25T17:57:31.8791293+08:00;True|2021-05-25T13:49:29.6488978+08:00;True|2021-05-25T13:48:24.6686105+08:00;True|2021-05-25T13:25:41.2512493+08:00;True|2021-05-24T17:55:33.3800078+08:00;True|2021-05-20T14:35:30.6957985+08:00;True|2021-05-20T13:17:22.6192995+08:00;True|2021-05-20T10:51:38.1268169+08:00;True|2021-05-19T19:50:03.7000224+08:00;True|2021-05-19T19:44:27.2518811+08:00;True|2021-05-19T19:43:26.5916681+08:00;True|2021-05-19T19:36:29.3197365+08:00;True|2021-05-19T19:30:00.3802430+08:00;True|2021-05-19T17:55:23.7939835+08:00;True|2021-05-19T11:05:17.9043392+08:00;True|2021-05-19T10:19:38.4839988+08:00;True|2021-05-19T10:17:19.7430612+08:00;True|2021-05-19T10:13:23.0031721+08:00;True|2021-05-19T10:06:03.9881599+08:00;True|2021-05-18T14:39:03.8876574+08:00;True|2021-05-18T14:23:46.9818836+08:00;True|2021-05-18T14:19:56.2382079+08:00;True|2021-05-18T11:29:53.5497590+08:00;True|2021-05-18T11:16:18.0123853+08:00;True|2021-05-17T18:59:52.4159105+08:00;True|2021-05-17T18:53:37.9438984+08:00;True|2021-05-17T18:48:14.9625161+08:00;True|2021-05-17T17:46:03.7723404+08:00;True|2021-05-17T17:14:20.2312990+08:00;True|2021-05-17T16:44:34.5837616+08:00;True|2021-05-17T16:25:20.1087804+08:00;True|2021-05-17T11:35:27.9388562+08:00;</History>
|
||||
<History>True|2021-07-30T01:32:38.2676032Z;True|2021-07-30T09:14:42.6170851+08:00;True|2021-07-29T19:06:09.1449349+08:00;True|2021-06-11T08:16:29.9542894+08:00;True|2021-06-04T14:46:02.2707457+08:00;True|2021-06-02T15:08:52.8245632+08:00;True|2021-06-02T15:05:50.3614099+08:00;True|2021-06-02T14:59:32.3690948+08:00;True|2021-06-02T14:10:25.1182836+08:00;True|2021-06-02T14:09:54.9215833+08:00;True|2021-06-01T10:41:54.9488501+08:00;True|2021-06-01T10:38:56.0283198+08:00;True|2021-05-28T13:59:02.2308877+08:00;True|2021-05-28T11:56:26.6796406+08:00;True|2021-05-28T11:28:00.4087907+08:00;True|2021-05-27T16:18:09.5993838+08:00;True|2021-05-27T16:07:31.3484951+08:00;True|2021-05-27T11:30:37.9119310+08:00;True|2021-05-27T11:28:35.5374674+08:00;True|2021-05-27T08:00:09.1625592+08:00;True|2021-05-26T20:42:17.0852150+08:00;True|2021-05-26T20:36:49.7527415+08:00;True|2021-05-25T17:57:31.8791293+08:00;True|2021-05-25T13:49:29.6488978+08:00;True|2021-05-25T13:48:24.6686105+08:00;True|2021-05-25T13:25:41.2512493+08:00;True|2021-05-24T17:55:33.3800078+08:00;True|2021-05-20T14:35:30.6957985+08:00;True|2021-05-20T13:17:22.6192995+08:00;True|2021-05-20T10:51:38.1268169+08:00;True|2021-05-19T19:50:03.7000224+08:00;True|2021-05-19T19:44:27.2518811+08:00;True|2021-05-19T19:43:26.5916681+08:00;True|2021-05-19T19:36:29.3197365+08:00;True|2021-05-19T19:30:00.3802430+08:00;True|2021-05-19T17:55:23.7939835+08:00;True|2021-05-19T11:05:17.9043392+08:00;True|2021-05-19T10:19:38.4839988+08:00;True|2021-05-19T10:17:19.7430612+08:00;True|2021-05-19T10:13:23.0031721+08:00;True|2021-05-19T10:06:03.9881599+08:00;True|2021-05-18T14:39:03.8876574+08:00;True|2021-05-18T14:23:46.9818836+08:00;True|2021-05-18T14:19:56.2382079+08:00;True|2021-05-18T11:29:53.5497590+08:00;True|2021-05-18T11:16:18.0123853+08:00;True|2021-05-17T18:59:52.4159105+08:00;True|2021-05-17T18:53:37.9438984+08:00;True|2021-05-17T18:48:14.9625161+08:00;True|2021-05-17T17:46:03.7723404+08:00;True|2021-05-17T17:14:20.2312990+08:00;True|2021-05-17T16:44:34.5837616+08:00;True|2021-05-17T16:25:20.1087804+08:00;True|2021-05-17T11:35:27.9388562+08:00;</History>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
Loading…
Reference in New Issue