0

我知道这个问题被发布了很多次,但我仍然不知所措。

我在我的 ASP.NET MVC 项目中使用身份。

注意:我的项目并不完全是一个 SPA,而是介于两者之间,所以如果他/她没有登录,我需要用户简单地转到“主页”。

但是通过使用“Authorize”属性,总会有一个“ReturnUrl”作为查询字符串附加。

根据我在下面的链接中读到的内容,这件事没有简单的配置:

删除 ReturnUrl 的简单方法 - GitHub

而且我找不到应该在哪里添加上面链接中提到的代码,即:

.AddCookie(options =>

所以我做了什么作为解决方法:

  1. 根据 ASP.NET Identity 的默认行为,如果用户没有登录,用户将被重定向到一个动作。
  2. 我以这种方式更改了“登录路径”:
services.ConfigureApplicationCookie(options => 
   {options.LoginPath = new PathString("/notsignedin");
});

然后创建了它的动作,这个动作的作用是将用户重定向到没有“ReturnUrl”查询字符串的“主页”。代码如下:

[Route("notsignedin")]
public IActionResult NotSignedIn()
{
   return RedirectToAction("Index");
}

虽然它有效,但我不太喜欢它,因为它会重定向用户两次。

由于我是初学者,我并不真正了解 ASP 中可用的所有功能,因此我感谢任何帮助。

4

1 回答 1

0

几个月后我终于找到了解决方案。

请注意,问题是使用 .net5 创建的,但答案是 .net6,没有太大区别!

这是我应该添加以更改“挑战”功能的代码:

builder.Services.ConfigureApplicationCookie(options =>
{
   options.Events.OnRedirectToLogin = opt =>
    {
        opt.HttpContext.Response.Redirect("/login");
        return Task.FromResult(0);
    };
});

添加该return Task.FromResult(0);部件是因为应返回一个任务。

请告诉我是否有更好的方法。

于 2021-12-04T20:29:16.660 回答