如何从自定义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

如何从自定义AuthorizeAttribute返回PartialView和模型

由于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;