使用 ASP.NET 标识时删除 ReturnUrl
Posted
技术标签:
【中文标题】使用 ASP.NET 标识时删除 ReturnUrl【英文标题】:Remove ReturnUrl while using ASP.NET Identity 【发布时间】:2021-12-10 03:51:05 【问题描述】:我知道这个问题被发布了很多次,但我仍然不知所措。
我在我的 ASP.NET MVC 项目中使用 Identity。
注意:我的项目并不完全是一个 SPA,而是介于两者之间,所以如果他/她没有登录,我需要用户直接转到“主页”。
但是通过使用“Authorize”属性,总会有一个“ReturnUrl”作为查询字符串附加。
根据我在下面的链接中看到的,这件事没有简单的配置:
Simple way to remove ReturnUrl - GitHub
我找不到应该在哪里添加上面链接中提到的代码,即:
.AddCookie(options =>
所以我做了什么作为解决方法:
-
根据 ASP.NET Identity 的默认行为,如果用户未登录,用户将被重定向到某个操作。
我这样更改了“登录路径”:
services.ConfigureApplicationCookie(options =>
options.LoginPath = new PathString("/notsignedin");
);
然后创建它的动作,这个动作的作用是重定向 用户访问没有“ReturnUrl”查询字符串的“主页”。这 代码如下:
[Route("notsignedin")]
public IActionResult NotSignedIn()
return RedirectToAction("Index");
虽然它有效,但我不太喜欢它,因为它会重定向用户两次。
由于我是初学者,我并不真正了解 ASP 中可用的所有功能,因此我感谢任何帮助。
【问题讨论】:
【参考方案1】:几个月后我终于找到了解决方案。
注意,问题是用 .net5 创建的,但答案是 .net6,差别不大!
这是我应该添加以更改“挑战”功能的代码:
builder.Services.ConfigureApplicationCookie(options =>
options.Events.OnRedirectToLogin = opt =>
opt.HttpContext.Response.Redirect("/login");
return Task.FromResult(0);
;
);
添加return Task.FromResult(0);
部分是因为应该返回一个任务。
请告诉我是否有更好的方法。
【讨论】:
以上是关于使用 ASP.NET 标识时删除 ReturnUrl的主要内容,如果未能解决你的问题,请参考以下文章
使用应用程序池标识在 IIS 上的 ASP.NET 中查询 Win32_Printer 时权限被拒绝