我正在编写一个使用 asp.net-mvc 部署到 iis6 的应用程序。我正在使用表单身份验证。通常,当用户尝试在未经适当授权的情况下访问资源时,我希望他们被重定向到登录页面。 FormsAuth 对我来说这件事很简单。
问题:现在我有一个由控制台应用程序访问的操作。让此操作响应状态 401 而不是将请求重定向到登录页面的最快方法是什么?
我希望控制台应用程序能够对此 401 StatusCode 做出反应,而不是透明的。我还想保留默认的将未经授权的请求重定向到登录页面的行为。
注意:作为测试,我将其添加到我的 global.asax 中,它没有绕过表单身份验证:
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
HttpContext.Current.SkipAuthorization = true;
}
@戴尔和安迪
我正在使用 MVC 预览版 4 中提供的 AuthorizeAttributeFilter。这将返回 HttpUnauthorizedResult。这个结果正确地将 statusCode 设置为 401。据我了解,问题是 asp.net 正在拦截响应(因为它被标记为 401)并重定向到登录页面,而不是只是让它通过。我想绕过某些网址的拦截。
好的,我解决了这个问题。我制作了自定义 ActionResult (HttpForbiddenResult) 和自定义 ActionFilter (NoFallBackAuthorize)。
为了避免重定向,HttpForbiddenResult 使用状态代码 403 标记响应。FormsAuthentication 不会捕获具有此代码的响应,因此实际上会跳过登录重定向。 NoFallBackAuthorize 过滤器检查用户是否已获得授权,与包含的 Authorize 过滤器非常相似。它的不同之处在于,当访问被拒绝时,它返回 HttpForbiddenResult。
HttpForbiddenResult 非常简单:
public class HttpForbiddenResult : ActionResult
{
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
context.HttpContext.Response.StatusCode = 0x193; // 403
}
}
似乎无法跳过 FormsAuthentication 模块中的登录页面重定向。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)