Redirect به صفحه خطاها در صورت بروز خطای عدم دسترسی
در method ها از Authorize استفاده کردم ، چجوری میشه وقتی AccessDenied?ReturnUrl رو میده به یک page ریدایرکت بشه؟
**********************************************************************
کامل تر:
کد خاصی نیست ببنید قبل متود برای دسترسی
[Authorize(Roles = "sms")]
نوشته شده
همچنین از طریق identity در جدول aspnetrole دسترسی لازم رو به کاربران میدیم
حالا کاربرایی که دسترسی ندارن چنانچه بخوان این اکشن و متود را باز کنن باز نمیشه و در URL لینک
http://localhost:55949/Account/AccessDenied?ReturnUrl=%2Fadmin%2FG_SMS
رو نشون میده
حالا میخوام بجای این یه صفحه نشون بده ( کاربر دسترسی لازم رو ندارد یه همچین چیزی )
لطفا کدهایی کهنوشتید رو قرار بدید. چون اینجوری فقط میشه یه سری کلیات رو گفت و جواب دقیق نمیشه داد اصلا
در کلاس Startup.cs میتونید این موارد رو تعیین کنید.
حالت اول : اگر میخواید در صورت بروز هر گونه خطا کاربر رو به یک مسیر خاص هدایت کنید و درواقع خطاها رو مدیریت کنید می تونید توی متد Configure از دستور زیر استفاده کنید :
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
در کد بالا در کنترلر Home باید یک اکشن به نام Error درست کنید و یک ویو هم به همین نام ایجاد کنید و درون این View متن مورد نظرتون رو در صورت بروز خطا بنویسید. از این ببعد هر خطایی به وجود بیاد این ویو نمایش داده میشه.
حالت دوم : نمایش صفحه 404. اگر کاربر مسیری رو وارد کرد که وجود نداشت باید خطای 404 رو نمایش بدید. برای انجام این کار کد زیر رو در Configure بنویسید :
app.Use(async (context, next) =>
{
await next();
if (context.Response.StatusCode == 404)
{
context.Request.Path = "/home/err404";
await next();
}
});
توی این حالت هم باید در کنترلر Home یک اکشن با نام err404 ایجاد کنید و همچنین یک ویو به همین نام. از این پس هر آدرسی که وجود نداشت درخواست شد صفحه err404 نمایش داده میشه.
حالت سوم : نمایش صفحه AccessDenied
به صورت پیش فرض وقتی کاربر تقاضای دسترسی به صفحه ای رو میکنه که مجاز نیست سیستم اتوماتیک کاربر رو به مسیر Account/AccessDenied میفرسته. شما باید در کنترلر Account یک اکشن به نام AccessDenied ایجاد کنید و یک ویو به همین نام و متن مورد نظرتون رو داخلش بنویسید تا از این پس اون چیزی که شما میخواید نمایش داده بشه.
می تونید هم البته این مسیر رو به صورت پیش فرض تغییر بدید. برای این منظور در متد Configure کد زیر رو بنویسید
app.UseStatusCodePages(async context => {
if (context.HttpContext.Response.StatusCode == 403)
{
// your redirect
}
});
این لینک هم در مورد همین موضوع هست
موفق باشید
تشکر حل شد
روش 2 اجرا میشه همیشه و 3 اجرا نمیشه
خیلی عالی
چجوری حلش کردید ؟ با روش ۲ یا کار دیگه ای انجامدادید ؟
با روش 2 شما مورد حل شد
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- نمایش صفحه در پنجره جدید با کلیک روی لینک (تگ a) در Asp
- افزودن مقادیر به صورت دستی به List دریافت شده از ریپازیتوری
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2