更新 上面没有重复,因为该问题路由到显式视图,而不是控制器/操作
我正在使用自定义授权(在控制器级别)以确保用户只能访问应用程序的特定功能(保存在外部访问控制系统中)。
以下是AuthorizeAttribute
类
public class MyCustomAuth : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
string ctrl = (string)filterContext.RouteData.Values["controller"];
bool isAuth = GetAuthorizedFunctions(HttpContext.Current.User).Any(f => f.Controller.Equals(ctrl, StringComparison.InvariantCultureIgnoreCase));
if (!isAuth)
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Contact", action = "Index", AuthMsg = "Sorry, unauthorized" }));
}
}
}
基本上,如果用户请求他们无权访问的功能,那么我会重定向到" Contact"页面显示合适的消息。
但是,在上面,AuthMessage被编码为URL字符串..
http://localhost/HotelRequests/Contact?AuthMsg=Sorry%2C%20unauthorized
如何在不显示URL的情况下传递此消息,最好是联系页面所需的ViewModel。
答案 0 :(得分:4)
TempData的寿命比ViewBag或ViewData
更多 filterContext.Controller.TempData["AuthMsg "] = "Sorry, unauthorized";
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Contact", action = "Index" }));
将联系人的索引方法中的内容读取为..
ViewBag.Message = TempData["AuthMsg "].ToString();