【问题标题】:asp.net mvc 401 Unauthorized error after redirect重定向后的asp.net mvc 401未经授权的错误
【发布时间】:2020-04-25 18:44:00
【问题描述】:

用户被重定向后,我收到 401 Unauthorized 错误。

创建新用户后,用户被重定向到另一个页面。

public ActionResult SaveUser(UserViewModel userViewModel)
{
    ModelState.Remove("IsDSA");
    ModelState.Remove("IsAccountRepresentative");

    var savedUser = SaveOrUpdateUser(ref userViewModel);

    TempData["Status"] = ViewBag.Status;
    TempData.Keep("Status");

    var MenuId = Request.QueryString["MenuID"];

    TempData["MenuId"] = MenuId;
    TempData.Keep("MenuId");

    if (userViewModel.AddAnotherUserRequseted && savedUser != null)
    {

        return RedirectToAction("CreateNewUser", new { MenuID = Request.QueryString["MenuID"] });
    }

    return RedirectToAction("UserAccessManagement", "UserAccessManagement", new { MenuID = Request.QueryString["MenuID"] });
}

public ActionResult UserAccessManagement(string TabName, long MenuID)
{
    ...
}

如何解决此错误?也许原因是身份验证 cookie 没有随重定向一起发送?

【问题讨论】:

  • 控制器上有[Authorize] 属性吗?用户是否调用SaveUser auth'd?
  • @scgough 控制器上没有属性,用户调用SaveUser 授权

标签: c# asp.net-mvc http authentication redirect


【解决方案1】:

这是因为你忘记了控制器上的 Authorize 属性

[Authorize]
public class UserAccessManagement: Controller {
    public ActionResult Index() {
        return View();
    }
}

【讨论】:

  • 添加了 Authorize 属性,但仍然无法正常工作。 BTW 授权属性添加到全局过滤器
  • 你的实际情况是什么?您是否正在添加新用户并且该新添加的用户将访问网络?
  • 场景是用户添加一个新用户并返回创建页面或带有用户列表的页面。我猜新用户会做什么与重定向错误无关
  • 好的,您能否将 MenuID 转换为 long 然后传递给您的新方法。希望它会工作
【解决方案2】:

因此,经过一整天的调查,我开始怀疑原因可能是在授权属性或全局过滤器中,并开始认为 IIS 可能以某种方式在重定向请求上返回 401。但是我发现了 RedirectToAction 的其他一些操作并且它们起作用了。除了托管在另一个 IIS 上的版本也有同样的问题

然后我开始怀疑MVC项目中是否有除默认之外的任何授权配置,并通过项目“授权”进行搜索,没有给出任何意外结果

但后来我想到了搜索“重定向”短语的所有解决方案,我终于找到了问题的根源......

因此,在 Application_EndRequest 上,StatusCode 设置为 401,并为错误类型的请求返回错误

我想搜索“401”也会有所帮助,如果常量被命名,它们会更早找到

【讨论】:

    猜你喜欢
    • 2020-10-30
    • 1970-01-01
    • 2023-03-03
    • 2012-01-23
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多