0
我正在开发一个MVC应用程序,我需要做一些业务逻辑每次请求时,除非请求是一个子请求,IE @Html.Action("GetStuff", "Stuff")
。我用自定义用户对象设置HttpContextUser。检查请求是否在相同的请求mvc
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
?这让我想起了一个红旗,指出我不知道的其他用户类型,以及我们的业务类型可能会发生变化。
我对此并不确定,因为其他开发者需要知道添加这个,我希望能够在SkipAuthorization代码块中解决它。 – dbarnes 2014-10-03 19:48:33
这是一个asp.net mvc的标准做法,所以其他开发人员应该知道它。但是如果你需要一个解决方法,一个好的解决方案是检查ViewData是否包含某个键,例如:ViewData [“firstrequest”]。如果密钥不存在并将其设置,则可以执行授权逻辑,并且之后运行的所有其他操作都将看到密钥并跳过授权逻辑。 – DrinkBird 2014-10-03 20:23:14