سلام برای اصلاح حروف فارسی و عربی https://barnamenevis.org/showthread....1-ASP-NET-Core
نگهداری توکن های منقضی شده کاربردش چیه؟
ip های کاربران رو واقعا نمیشه به دست اورد. خیلی چیزها توی این موارد تاثیر گذاره.
مثل فایروالها یا فیلتر ش*ک*ن و .....
تجبریباتتون رو بگذارید همه با هم به نتیجه برسیم
در مورد میان افزار من یک میان افزار بر اساس خیلی از آموزشهای دنیای وب نوشتم که بتونم خطاهای api ها رو مدیریت کنم
توضیحاتش رو هم نوشتم که قابل استفاده باشه
/// <summary>
/// میان افزار مدیریت خطاها
/// </summary>
public static class CustomExceptionHandlerMiddlewareExtentions
{
public static IApplicationBuilder UseCustomExceptionHandler(this IApplicationBuilder builder)
{
return builder.UseMiddleware<CustomExceptionHandlerMiddle ware>();
}
}
/// <summary>
/// میان افزار مدیریت خطاها
/// </summary>
public class CustomExceptionHandlerMiddleware
{
private readonly RequestDelegate _next;
private readonly IWebHostEnvironment _evn;
/// <summary>
/// میان افزارها به ترتیب یکدیگر را صدا میزنند
/// در زمان صدا زدن باید میان افزار بعدی را صدا بزنیم
/// پس از RequestDelegate برای صدا زدن بعدی استفاده میکنیم.
/// در واقع یک درخواست باید از تمام میان افزارها عبور کند تا نتیجه را بازگشت بدهد
/// </summary>
/// <param name="next"></param>
/// <param name="evn"></param>
public CustomExceptionHandlerMiddleware(RequestDelegate next, IWebHostEnvironment evn)
{
_next = next;
_evn = evn;
}
public async Task Invoke(HttpContext context)
{
List<string> Message = new List<string>();
HttpStatusCode httpStatusCode = HttpStatusCode.InternalServerError;
ApiResultStatusCode apiResultStatus = ApiResultStatusCode.ServerError;
// درصورت آمدن به این قطعه کد یعنی درخواست مشکی نداشته است.
// پس به سراغ متد بعدی میرود
try
{
await _next(context);
}
// در صورت بروز خطا این خطا با فرمت مورد نظر ما بازگشت داده میشود.
catch (AppException exception)
{
httpStatusCode = exception.HttpStatusCode;
apiResultStatus = exception.ApiStatusCode;
if (_evn.IsDevelopment())
{
var dic = new Dictionary<string, string>
{
["Exception"] = exception.Message,
["StackTrace"] = exception.StackTrace,
};
if (exception.InnerException != null)
{
dic.Add("InnerException.Exception", exception.InnerException.Message);
dic.Add("InnerException.StackTrace", exception.InnerException.StackTrace);
}
if (exception.AdditionalData != null)
dic.Add("AdditionalData", JsonConvert.SerializeObject(exception.AdditionalDa ta));
Message.Add(JsonConvert.SerializeObject(dic));
}
else
{
Message.Add("خطایی رخ داده است.");
}
await WriteToResponseAsync();
}
catch (Exception exception)
{
if(_evn.IsDevelopment())
{
var error = new Dictionary<string, string>
{
["Exception"] = exception.Message,
["StackTrace"] = exception.StackTrace,
};
Message.Add(JsonConvert.SerializeObject(error));
}
else
{
Message.Add("خطایی رخ داده است.");
}
await WriteToResponseAsync();
}
async Task WriteToResponseAsync()
{
// چون خطا رخ داده پس مقدار issucced == false
//
var result = new ApiResult(false, apiResultStatus, Message);
// خطاهای موجود در این دیکشنری به همراه جزئیات خطا را به فرمت
// json تبدیل کرده و بازگشت میدهیم.
var jsonResult = JsonConvert.SerializeObject(result);
context.Response.StatusCode = (int)httpStatusCode;
context.Response.ContentType = "application/json";
await context.Response.WriteAsync(jsonResult);
}
}