在我的MVC应用程序上,我用这个装饰了控制器的一些方法:
[PrincipalPermission(SecurityAction.Demand, Role = "Administrator")]
public ActionResult Create(FormCollection collection)
{
try {
...
}
catch {
return View();
}
}
事实上,如果我没有使用正确的角色登录,MVC 应用程序会引发异常。问题是我没有将应用程序重定向到错误页面。
我尝试像这样创建一个基本控制器:
[HandleError]
public class BaseController : Controller
{
protected override void OnException(ExceptionContext filterContext)
{
// Make use of the exception later
this.Session["ErrorException"] = filterContext.Exception;
// Mark exception as handled
filterContext.ExceptionHandled = true;
// ... logging, etc
// Redirect
filterContext.Result = this.RedirectToAction("Error", "Home");
base.OnException(filterContext);
}
}
然后在主控制器中添加错误视图以及实际视图。问题是,当我在Visual Studio中尝试此操作时,我在输入受保护的操作方法时首先出现异常:
SecurityException was unhandled by the application
然后我必须做调试|继续,然后我才会被重定向到"错误"视图,但这在生产应用程序中是不可接受的,因为它应该直接转到"错误"视图。
只是想知道为什么你不只是使用标准的授权属性。很确定它会做同样的事情并且只是工作吗?
例如
[Authorize(Roles="Administrator")]
public ActionResult Create(FormCollection collection)
有关一般 MVC 安全性的文章,请点击此处。http://www.codeproject.com/Articles/288631/Secure-ASP-NET-MVC3-applications