如何从自定义AuthorizeAttribute返回PartialView和模型
本文关键字:PartialView 模型 返回 AuthorizeAttribute 自定义 | 更新日期: 2023-09-27 18:19:34
我所做的核心是,如果你访问www.mysite.com/admin/index.我想呈现一个显示"未授权"的部分视图,该视图附带有一个模型,当我真的想让他们说"我在/admin/index页面上出现了未经授权的错误"时。
我的CustomAuthorizeAttribute继承自AuthorizeAttribute,除了重定向之外,它运行得很好。
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
// returns boolean if it is good or not
}
然后我有了HandleUnauthorizedRequest,这就是我需要传递带有模型的部分:
if (context.RequestContext.HttpContext.User.Identity.IsAuthenticated)
{
base.HandleUnauthorizedRequest(context);
}
else
{
var viewResult = new PartialViewResult();
viewResult.ViewName = "~/Views/Shared/Unauthorized.cshtml";
viewResult.Model = new ViewModels.Unauthorized() { MyData = "My Data" }; // obviously can't do this as it is read-only
context.Result = viewResult;
}
我知道我可以删除viewResult.Model并只使用ViewBag,但我真的希望有某种方法将模型传递给Partial
由于PartialViewResult.Model
只获取并返回ViewData.Model
,所以您所要做的就是创建并设置ViewData
属性:
var model = new ViewModels.Unauthorized() { MyData = "My Data" };
var viewResult = new PartialViewResult
{
ViewName = "~/Views/Shared/Unauthorized.cshtml",
ViewData = new ViewDataDictionary(model)
};
context.Result = viewResult;