我正在开发一个MVC应用程序,每次请求进入时我都需要做一些业务逻辑,除非请求是一个子请求IE @Html.Action("GetStuff", "Stuff")
。我正在使用自定义用户对象设置HttpContextUser。
if (SkipAuthorization(filterContext))
{
return;
}
else
{
filterContext.HttpContext.User = GetBusinessUser()
}
SkipAuthorization的位置如下:
bool SkipAuthorization(AuthorizationContext filterContext)
{
//blah blah
bool isInSameRequest = (filterContext.HttpContext.User != null
&& filterContext.HttpContext.User.Identity != null
&& filterContext.HttpContext.User.Identity.IsAuthenticated);
//more blah blah
return result;
}
当使用winAuth设置服务器时,这似乎会导致错误,我想我们都学习了东西吧?
我的问题如下,是否有更好的方法来检查请求是否是一个子请求并跳过它,或者我是否必须检查用户是否为WindowsIdentity
,或{{ 1}?这让我想起了我不了解的其他用户类型,以及我们的业务类型可能会发生变化。
答案 0 :(得分:0)
我会使用稍微不同的方法。作为子动作的每个动作(当您调用它时为“子请求”)将使用
进行注释[ChildActionOnly]
这可以防止用户直接调用这些操作。
在视图中渲染子操作不会触发更多请求,因此您应该没有任何其他逻辑。