دوستان چجوری میتونم از دستور ReturnUrl در Asp.net Core استفاده کنم ؟ میخوام اگر کاربر لاگین نکرده و آدرسی رو در Url مرورگر وارد کرد که نیاز به لاگین کردن داشت به صفحه Login هدایت بشه و بعد از Login اتوماتیک به همون مسیر اول که درخواست کرده بود هدایت بشه.
این کار رو با یک مثال عملی براتون انجام میدم تا راحتتر درک کنید روش انجام کار رو
{
"ConnectionStrings": {
"DefaultConnection": "Server=.;Database=ReturnUrlDB; user Id=sa; Password= 1;"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
[Authorize]
public IActionResult DetailsPage()
{
return View();
}
نمایی از Solution تا اینجا
خب در View جدید میتوانید تگهای مورد نیاز خود را هم بنویسید. در اینجا چون به صورت تستی کار می کنیم یک متن خیلی ساده در ویوی DetailsPage می نویسیم.
ویوی DetailsPage.cshtml
<p>
You Are in Details Page
</p>
https://localhost:44367/Home/DetailsPage
مشاهده می کنید که این صفحه نمایش داده می شود.
خب حالا Logout کنید و مجدد به همین مسیر بروید. مشاهده می کنید که به صورت اتوماتیک به صفحه Login هدایت می شوید. اگر در آدرس مرورگر نگاه کنید چیزی مشابه با زیر مشاهده خواهید کرد.
https://localhost:44367/Identity/Account/Login?ReturnUrl=%2FHome%2FDetailsPage
در تصویر زیر هم میتوانید خروجی را مشاهده کنید.
مشاهده می کنید که به صورت اتوماتیک به صفحه لاگین هدایت شدیم و در آدرس ReturnUrl وجود دارد و آدرس صفحه درخواست شده هم در آن موجود می باشد. بعد از لاگین هم اتوماتیک به صفحه مورد نظر هدایت می شوید. بنابراین اگر شما در پروژه خود از Authentication به صورت پیش فرض استفاده کرده باشید خاصیت ReturnUrl اتوماتیک فعال می باشد.
خب حالا اگر شما در پروژه خودتون به صورت پیش فرض از Authentication استفاده نکردید و به صورت دستی به وجود آوردید میتونید توی ویوی Login خودتون از asp-route استفاده کنید. برای این منظور در form لاگین دستور زیر را بنویسید :
<form asp-controller="Account" asp-action="Login" asp-route-returnurl="@ViewBag.returnurl" method="post">
</fotm>
همچنین در کنترلر Account و اکشن Login هم به این صورت عملی کنید.
public class AccountController : Controller
{
private readonly UserManager<IdentityUser> _userManager;
private readonly SignInManager<IdentityUser> _signInManager;
public AccountController(UserManager<IdentityUser> userManager, SignInManager<IdentityUser> signInManager)
{
_userManager = userManager;
_signInManager = signInManager;
}
public IActionResult Login(string returnurl)
{
ViewBag.returnurl = returnurl;
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model, string returnurl = "")
{
if (ModelState.IsValid)
{
var user = await _userManager.FindByNameAsync(model.UserName);
if (user == null)
{
ViewBag.errorMesasge = "Invalid UserName Or Password";
return View();
}
else
{
var result = await _signInManager.PasswordSignInAsync(user.UserName, model.Password, true, lockoutOnFailure: true);
if (result.Succeeded)
{
if (returnurl != null)
{
//returnurl
return Redirect("https://localhost:44306" + returnurl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
}
}
else
{
return View(model);
}
return View("Login");
}
}
خب در این صورت هر موقع قصد دسترسی به اکشنی رو داشته باشید که نیاز به Authorize داشت اتوماتیک به اکشن Login هدایت میشه و مقدار returnurl هم در متغیر returnurl ذخیره میشه تا بعد از لاگین از اون استفاده بشه.
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
80
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
114
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1034
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
431
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1357
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4800
- پاسخ :
1
|
تاریخ :
1403/07/27
- ساعت :
03:21:00 PM
- بازدید :
217
- پاسخ :
1
|
تاریخ :
1403/07/26
- ساعت :
09:00:00 PM
- بازدید :
117
- پاسخ :
0
|
تاریخ :
1403/05/16
- ساعت :
09:57:00 AM
- بازدید :
397
- پاسخ :
2
|
تاریخ :
1403/06/25
- ساعت :
11:39:00 PM
- بازدید :
568
- پاسخ :
1
|
تاریخ :
1401/02/24
- ساعت :
02:17:00 PM
- بازدید :
2013
- پاسخ :
1
|
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
80
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
114
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1034
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
431
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
931
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1357
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4800
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1161
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
599
- پاسخ :
1
|