小编pki*_*dza的帖子

测试自定义AuthorizationAttribute时抛出NullReferenceException

我看了看:

我正在尝试测试我编写的自定义AuthorizeAttribute.

我尝试过很多不同的东西让它发挥作用.这是我目前的尝试.

[AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)]
public class ConfigurableAuthorizeAttribute : AuthorizeAttribute
{
    private Logger log = new Logger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    private IRoleHelper roleHelper;

    public ConfigurableAuthorizeAttribute()            
    {
        roleHelper = new ADRoleHelper();
    }

    public ConfigurableAuthorizeAttribute(IRoleHelper roleHelper)            
    {
        this.roleHelper = roleHelper;
    }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (!httpContext.User.Identity.IsAuthenticated)
        {
            return false;
        }

        if (this.roleHelper.IsUserInRole(this.Roles, HttpContext.Current.User.Identity.Name))
        {
            return true;
        }

        return false;
    }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        base.HandleUnauthorizedRequest(filterContext);
        filterContext.Result = new RedirectResult("~/home/Unauthorized");            
    }


}
Run Code Online (Sandbox Code Playgroud)
[Test] …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc nunit unit-testing moq

5
推荐指数
1
解决办法
2995
查看次数

实体框架:按顺序排序,然后按分组排序

我正在使用实体框架代码优先,并具有以下POCO代表我的数据库中的表.

public class LogEntry
{
    public int Id {get; set;}
    public DateTimeOffset TimeStamp {get;set;}
    public string Message {get; set;}
    public string CorrelationId {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

CorrelationId不是唯一的.表中通常会有多个具有相同CorrelationId的记录,该字段用于跟踪哪些日志条目对应于哪个请求.

然后我有另一个对象,让我通过CorrelationId对这些日志条目进行分组.此对象不会映射回DB中的任何表.

public class AuditTrail
{
    public string CorrelationId {get; set;}
    public DateTimeOffset FirstEvent {get; set;}
    public List<LogEntry> LogEntries {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我希望能够填充AuditTrail对象列表.问题在于我希望对它们进行排序,以便最新的Audit Trail记录位于顶部.我也正在进行分页,所以我需要在分组之前发生命令,以便返回正确的记录.即我不想得到结果,然后对它们进行排序.排序需要在返回数据之前进行.

我已经尝试了一些查询并最终得到了这个:

var audits = from a in context.LogEntries
                             group a by a.CorrelationId into grp
                             select grp.OrderByDescending(g => g.TimeStamp);
Run Code Online (Sandbox Code Playgroud)

这给了我一个IQueryable<IOrderedEnumerable<LogEntry>>后台,我迭代来构建我的AuditTrail对象.问题是记录只在组内排序.例如,我将返回昨天的AuditTrail,然后是一周之前的一个,然后是今天的一个,但在LogEntries列表中,所有这些条目都已排序.我想要的是AuditTrails基于TimeStamp列以降序返回,以便在UI的表顶部显示新的AuditTrails.

我也尝试过这个查询(根据实体框架跳过按组分组):

var audits = context.LogEntries.GroupBy(i => i.CorrelationId)
                               .Select(g …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework entity-framework-6

5
推荐指数
1
解决办法
3766
查看次数