我原以为它会返回“真”或“假”.
我在Controller中重写了OnAuthorization,并且基于丢失或无效的Header值,我希望返回禁止的403,但是我似乎不知道如何从OnAuthorization返回任何内容,这样它实际上将阻止Controller的其他部分运行。
我该怎么办?
我在下面的第一次尝试是一个巨大的失败,我认为否认()正在运行,但什么都没有发生.
public class AuthController : Controller
{
protected override void OnAuthorization(AuthorizationContext filterContext)
{
if (string.IsNullOrEmpty(filterContext.HttpContext.Request.Headers["Authorization"]))
Deny();
string authString = filterContext.HttpContext.Request.Headers["Authorization"];
base.OnAuthorization(filterContext);
}
private ActionResult Deny()
{
HttpContext.Response.StatusCode = 403;
return Content("Access Denied", "text/plain");
}
}UPDATE看起来是这样做的,为什么这可能是一个糟糕的方法呢?
if (string.IsNullOrEmpty(filterContext.HttpContext.Request.Headers["Authorization"]))
{
filterContext.Result = Content("Access Denied", "text/plain");
filterContext.HttpContext.Response.StatusCode = 403;
base.OnAuthorization(filterContext);
}再次更新,,ok,所以现在根本不起作用了.我输入了一个断点,并看着它进入if语句,然后到达base.OnAuthorization(.)打电话,然后再出来.如果它没有执行,它为什么要进入if语句?如果它正在执行,为什么要调用base.OnAuthorization(.)不是早点结束吗?
发布于 2011-07-28 20:38:01
您可以抛出httpexception:
throw new HttpException(403, "Access Denied");发布于 2011-09-02 11:16:30
关于?
throw new UnauthorizedAccessException();发布于 2011-08-17 13:08:56
另一种保护应用程序的方法:保护您的ASP.NET MVC 3应用程序
https://stackoverflow.com/questions/6795746
复制相似问题