我知道这个问题已经贴了很多次了,但我仍然不知所措。
我在ASP中使用Identity。. NET MVC项目。
注意:我的项目不完全是一个SPA,但介于两者之间,所以我需要用户简单地去"主页"。如果他/她没有登录。
但是通过使用"Authorize"属性,总是会有一个"ReturnUrl"作为查询字符串追加。
根据我在下面的链接中看到的,这个问题没有简单的配置:
删除ReturnUrl的简单方法- GitHub
我找不到我应该在哪里添加上面链接中提到的代码,它是:
.AddCookie(options =>
所以我所做的作为一个解决方案:
- 根据ASP的默认行为。. NET标识,如果用户没有登录,用户将被重定向到一个操作。
- 我更改了"登录路径":
services.ConfigureApplicationCookie(options =>
{options.LoginPath = new PathString("/notsignedin");
});
,然后创建它的操作,这个操作的作用是重定向用户进入"主页"没有"ReturnUrl"查询字符串。的代码如下:
[Route("notsignedin")]
public IActionResult NotSignedIn()
{
return RedirectToAction("Index");
}
虽然它工作,但我真的不喜欢它,因为它重定向用户两次。
由于我是初学者,所以我并不真正了解ASP中可用的所有功能,所以我非常感谢您的帮助。
几个月后我终于找到了解决办法。
注意,这个问题是用。net5创建的,但答案是。net6,没有太大的区别!
这是我应该添加的代码来改变"challenge"功能:
builder.Services.ConfigureApplicationCookie(options =>
{
options.Events.OnRedirectToLogin = opt =>
{
opt.HttpContext.Response.Redirect("/login");
return Task.FromResult(0);
};
});
添加return Task.FromResult(0);
部分,因为应该返回一个Task。
请告诉我是否有更好的方法。