ورود

View Full Version : برای انجام چه کارهایی از MIDDLE WARE استفاده می کنید ؟



Arash Jahangiri
یک شنبه 21 شهریور 1400, 10:03 صبح
سلام دوستان
ممنون میشم تجربیات خود از استفاده middleware در AspCore را اشتراک بگذارید...

ممنون:تشویق::قلب:

Rohollah_18
یک شنبه 21 شهریور 1400, 12:05 عصر
سلام دوست من MiddleWare ها برای کنترل درخواست ها و پاسخ ها بیشتر استفاده میشه

mehran6764
یک شنبه 21 شهریور 1400, 12:11 عصر
منظورتون مواردی هست که برنامه نویس برای انجام کارهاش بصورت سفارشی نوشته یا middleware های آماده که از nugget نصب میشه ؟

Arash Jahangiri
دوشنبه 22 شهریور 1400, 08:59 صبح
middleware یک کامپوننت هست و به نوعی بر سر راه درخواست های کاربر قرار می گیرد و می تواند به در خواست ها و پاسخ ها دستوراتی را اضافه کند .
و 4 مدل هم می تواند داشته باشد : Content Generating , short circuiting , request editing , response editing
جدای از بحث معرفی middleware میخام توضیح بدید در پروژه هایی ک استفاده کردید برای انجام چه کارهایی از middleware استفاده کردید . به اشتراک بگذارید اون تسک رو :چشمک:
مثلا کنترل ip کاربر یا دیگه چی ؟ شما چه تسک هایی رو در پروژه ها انجام دادید.....

mehran6764
دوشنبه 22 شهریور 1400, 12:29 عصر
من بصورت عملی انجام ندادم ، چون در اصل نمی تونم چطور پیاده سازی کنم و الان به این مباحث نیاز دارم .. اگر حوصله داشته باشین ممنون میشم در این زمنیه از شما کمک بگیرم
اما مواردی که نیاز دارم :

1- جايگزين كردن حرفهای ي و ك با ی و ک صحیح در خط فارسی (( مثلا در تمام پارامترهایی که family هست ) این اتفاق بیفته

2- بررسی توکن هایی که منقضی شدن ( من هر توکنی که خروج بزنه داخل یه جدول تو دیتابیس ) ذخیره کردم ، بعد تو هر کنترلی که از سمت کاربر درخواست میشه
کد نوشتم که بررسی کن این توکن جزو توکن های Expire شده هست یا خیر

مورد سوم هم همون IP کاربر هست که خودتون اشاره کردین ، به این سه مورد برای پروژه ام شدید نیاز دارم

hamzehsh
شنبه 27 شهریور 1400, 07:36 صبح
سلام برای اصلاح حروف فارسی و عربی https://barnamenevis.org/showthread.php?565879-%DB%8C%DA%A9%D8%B3%D8%A7%D9%86-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%AD%D8%B1%D9%88%D9%81-%DB%8C-%D9%88-%DA%A9-%D8%AF%D8%B1-ASP-NET-Core

نگهداری توکن های منقضی شده کاربردش چیه؟

ip های کاربران رو واقعا نمیشه به دست اورد. خیلی چیزها توی این موارد تاثیر گذاره.
مثل فایروالها یا فیلتر ش*ک*ن و .....

تجبریباتتون رو بگذارید همه با هم به نتیجه برسیم

در مورد میان افزار من یک میان افزار بر اساس خیلی از آموزشهای دنیای وب نوشتم که بتونم خطاهای api ها رو مدیریت کنم
توضیحاتش رو هم نوشتم که قابل استفاده باشه


/// <summary>
/// میان افزار مدیریت خطاها
/// </summary>
public static class CustomExceptionHandlerMiddlewareExtentions
{
public static IApplicationBuilder UseCustomExceptionHandler(this IApplicationBuilder builder)
{
return builder.UseMiddleware<CustomExceptionHandlerMiddleware>();
}
}


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

mehran6764
شنبه 27 شهریور 1400, 09:57 صبح
سلام

ممنون بابت توضیحاتتون اما همچنان من دقیقا متوجه نشدم چطور بایدپیاده سازی کنم ، شاید چون بعضی از مفاهیم رو بلد نیستم..


**
من برای پیاده سازی JWT از یک مقاله سایت خارجی استفاده کردم اما چند تا مشکل داشت : خیلی راحت دیکود می شد ، هیچی راهی برای رفرش کردن توکن هایی که
به ازای هر شماره موبایل تولید می شد پیدا نکردم ، برا همین اومدم توکن هایی که خروج می زنن داخل دیتابیس ذخیره کردم و داخل هر کنترلر چک می کنم که آیا این توکن
قبلا خروج زده یا خیر