我正在检查用户是否已经在global.asax中被授权,如果为true则重定向到某个路径
if (false)
{
HttpContext.Current.Response.RedirectToRoute("Login");
}
它抛出了异常:
在此上下文中无法获得响应
答案 0 :(得分:3)
我认为使用web.config
中的authentication tag是一个更好的解决方案。
// or loginUrl="~/Account/LogOn" for example in an MVC application
<authentication mode="Windows">
<forms
name=".ASPXAUTH"
loginUrl="login.aspx"
defaultUrl="default.aspx"
protection="All"
timeout="30"
path="/"
requireSSL="false"
slidingExpiration="true"
cookieless="UseDeviceProfile" domain=""
enableCrossAppRedirects="false">
<credentials passwordFormat="SHA1" />
</forms>
<passport redirectUrl="internal" />
</authentication>
您可以定义 loginUrl ,如果用户尝试访问需要身份验证的资源,用户将被重定向。
<强>更新强>
根据您给出的评论,我认为您可能正在寻找基于授权的路由。在 SO问题 MVC role-based routing中已经有了答案。
答案 1 :(得分:0)
据我所知,ASP.NET与HttpContext
和HttpRequest
对象一起创建HttpResponse
个对象。它在创建HttpApplication
实例之前发生。
所以HttpContext.Current
似乎在这个阶段不起作用。
在应用程序事件的内部处理程序中,您可以获取上下文抛出sender
:
private void OnAuthorizeRequest(object sender, EventArgs e)
{
var application = (HttpApplication)sender;
var context = (HttpContext)application.Context;
}
(AuthorizeRequest
是重定向匿名用户的正确位置,因为之前的AuthenticateRequest
已经过身份验证或尚未对用户进行身份验证。 )
详见here。
重要的是:邻居答案绝对正确,您应该使用web.config
来制作此内容。我的回答是“它是如何工作的”,以及“它是如何完成的”。