我正在开发一个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
还是MyCustomUser
?这在我脑海中留下了一个危险信号,即我不知道还有哪些其他用户类型,我们的业务类型可能会改变。
我会使用稍微不同的方法。每个作为子操作的操作(您称之为"子请求")都会用进行注释
[ChildActionOnly]
这样可以防止用户直接调用这些操作。
在视图中呈现子操作不会触发更多的请求,因此在没有任何额外逻辑的情况下应该可以。