1

我们有一个登录强制应用程序,它只允许用户在我们的应用程序中登录到单个会话。这是在 postauthenticate 请求事件处理程序中完成的。

如果用户需要注销(他们有另一个会话),我们这样做:

FormsAuthentication.SignOut();
FormsAuthentication.RedirectToLoginPage();

这已经很好地工作了很长时间。现在我们正在向我们的应用程序添加一个 web api。当您点击 Web api Url 时, PostAuthentication 事件确实会触发,它会看到用户已在其他地方登录......但是,它会重定向到登录......由于代码,这是预期的。

我试图更改上面的代码以设置Response.StatusCode = 401然后结束请求。好吧,这很好用,但是 asp.net 很“不错”并且会自动重定向到登录页面。

如果这个请求来自 web api URL,有没有办法我可以用 401 响应而不让它重定向到登录页面?

4

2 回答 2

1

问题是 FormsAuthenticationModule 在 EndRequest 捕获所有出站请求,如果状态为 401 并且 URL 不是配置的登录位置,您将被重定向到登录位置。

没有什么好方法可以解决这个问题。基本上我已经看到了两种方法,但都不是很棒的:

  1. 实现您自己的 FormsAuthenticationModule。与其使用开箱即用的,不如自己动手做,知道异常并让 401 通过。
  2. 向为您发出 401 的登录页面添加一些逻辑。查看入站 URL。如果 URL 是来自 FormsAuthenticationModule 的重定向之一,但用户已经登录,则发出 401 而不是显示登录表单。FormsAuthModule 不会循环重定向到登录表单,所以你没问题。
于 2012-08-31T21:09:23.530 回答
1

您可以将 HttpResponse 的 SuppressFormsAuthenticationRedirect 设置为 true,FormsAuthentication 模块将不会捕获 401。

于 2015-04-26T11:00:42.503 回答