【发布时间】:2015-02-13 12:29:44
【问题描述】:
在我的 MVC5 应用程序中,如果用户没有权限,某些视图组件不会在 RAZOR 中呈现。
使用与我的应用程序的其余部分完全异步的存储库模式获取权限。
我已经实现了一个IPermission Service,它具有以下方法
public interface IPermissionService
{
Task<bool> IsUserAllowed(string moduleName, string action);
Task<bool> IsUserAdmin();
}
现在为了能够在我的视图中使用此服务,我编写了一个自定义视图基础,它继承自 WebViewPage,如下所示:
public abstract class ViewBase<T> : WebViewPage<T> where T : class
{
public IPermissionService Permissions;
public override void InitHelpers()
{
base.InitHelpers();
Permissions= DependencyResolver.Current.GetService<IPermissionService>();
}
public override void Execute()
{
}
}
我无法从我的视图中使用这些异步函数,因为 await 在那里不起作用。我不想创建数据存储库的单独非异步实现。另外,我觉得根据call async method without await #2
,通过执行诸如 Task.Result() 之类的操作来调用异步函数而不等待也不是一个好主意有更好的方法吗?
【问题讨论】:
-
将权限检索作为控制器逻辑的一部分而不是视图逻辑不是更好吗?
-
是的,我想这样做。但是我如何将它传递给视图?查看包?
-
在用户登录时,权限也会被加载并存储在缓存/会话中。它更像是一种 IsAllowed() 类型的检查,我需要在视图中执行并且不希望在视图中有代码块。这是在单独的帮助类中编写它的主要思想。
-
@Yash:现在任何解决方案都将是一个 hack。 ASP.NET vNext will have proper support for
awaitin razor views.
标签: c# asp.net-mvc razor asp.net-mvc-5 async-await