C# User.Identity.Name变为空,但我无法理解原因

C# User.Identity.Name变为空,但我无法理解原因,c#,linq,linq-to-sql,asp.net-mvc-2,C#,Linq,Linq To Sql,Asp.net Mvc 2,基本上,我一直被asp.net mvc应用程序抛出,因为User.Identity.IsAuthenticated为false,这只是因为下面的代码与任务注释相关(下面标记**)-我无法理解为什么会发生这种情况,非常感谢您的帮助 下面的代码位于我的基本控制器上对用户进行身份验证的自定义属性中,如果未进行身份验证,我将抛出如下异常: if (!httpContext.User.Identity.IsAuthenticated) throw new NoAccessException("una

基本上,我一直被asp.net mvc应用程序抛出,因为User.Identity.IsAuthenticated为false,这只是因为下面的代码与任务注释相关(下面标记**)-我无法理解为什么会发生这种情况,非常感谢您的帮助

下面的代码位于我的基本控制器上对用户进行身份验证的自定义属性中,如果未进行身份验证,我将抛出如下异常:

if (!httpContext.User.Identity.IsAuthenticated)
   throw new NoAccessException("unauthorized user"); // invalid users are thrown out...
导致User.Identity.IsAuthenticated+User.Identity.Name变为null的代码是:

[HttpGet]
    public ActionResult TaskDetail(int houseid, int taskid)
    {

        //NOTE: _repo is a simple ISession over Linq to Sql
        //GetCurrentUser() is a extention method which gets the current logged on user
        //i.e. User.Identity.Name so I can get the users credentials

        var loggedonuser = _repo.GetCurrentUser();

        var _house= _repo.Single<House>(x => x.HouseID== houseid&& x.ClientID== loggedonuser.CompanyID);

        if (_house== null)
            throw new NoAccessException();

        var summary = _instruction.ToSummaryDTO();

        var companies = _repo.All<Company>();
        //var users = _repo.All<User>();

        var task = _repo.Single<Task>
            (x => x.HouseID== _house.HouseID && x.CompanyID == loggedonuser.CompanyID);

        var dto = new TaskDTO
        {
            TaskID = task.TaskID,
            Title = task.Title,
            Description = task.Description,
            DateCreated = task.DateCreated,
            IsClosed = task.IsClosed,
            CompanyID = companies.Where(y => task.CompanyID == y.CompanyID).SingleOrDefault().Identifier
        };

        **dto.AllComments** = _repo.All<TaskComment>()
            .Where(x => x.TaskID == task.TaskID)
            .OrderByDescending(x => x.Timestamp)
            .Select(x => new TaskCommentDTO
            {
                Comment = x.Comment,
                Timestamp = x.Timestamp,
                CompanyID = companies.Where(y => x.CompanyID == y.CompanyID).SingleOrDefault().Identifier
            });


        return View(new TaskViewModel
        {
            Summary = summary,
            TaskDetail = dto,
        });
    }
页面加载完成后,再次运行此代码,当我在RoutedData的值中签出请求上下文时,我发现“Error”和“FileNotFound”,此时用户也被清空,现在我需要找出未找到的文件…:(

从您的代码:

var task = _repo.Single<Task>
            (x => x.HouseID == _house.HouseID && x.CompanyID == loggedonuser.CompanyID);

    var dto = new TaskDTO
    {
        TaskID = task.TaskID,
        Title = task.Title,
        Description = task.Description,
        DateCreated = task.DateCreated,
        IsClosed = task.IsClosed,
        CompanyID = companies.Where(y => task.CompanyID == y.CompanyID).SingleOrDefault().Identifier
    };
调用
SingleOrDefault()
结果上的属性
Identifier
,该结果可能为
null
。您是否检查过这是否正常。是否在此行引发异常


注意:您可以使用
IEnumerable
而不是
IQueryable
;可能不会有任何区别,但如果这是崩溃的部分,您可以免费尝试它。

您是否尝试调试以查看哪一行引发异常?尝试单步执行并观察变量以查看发生了什么。是的-一旦我的筛选器运行NoAccessException是如上所示抛出的,在此之前我无法跟踪,因为我不确定在我的筛选器之前运行的是什么代码(如果有的话)……此外,正如我提到的,如果我删除与注释相关的代码,一切正常……linq查询对您来说看起来正常吗?发布在下面,试图帮助跟踪出错的地方。我删除了对公司和这没什么作用…我觉得很奇怪,在第一次请求这个url时,一切都正常,任何其他请求都失败了…linq到sql映射可能有问题吗?或者其他什么问题吗?你能在函数的开头添加一个断点来确认,哪一行抛出异常。你能使用F11进入该行的函数吗呼叫?@Chris-查看更新的问题,设法找到问题发生的地方(我想)…继续调试。听起来你正在跟踪它。找到了…我从某处复制并粘贴了一个css图像链接,可能我假设它是一个jquery ui图像,这就是引发异常的原因,伙计,我需要被踢!无论如何,我感谢你的帮助,谢谢你。
    protected override void Execute(System.Web.Routing.RequestContext requestContext)
    {
        base.Execute(requestContext);
    }
var task = _repo.Single<Task>
            (x => x.HouseID == _house.HouseID && x.CompanyID == loggedonuser.CompanyID);

    var dto = new TaskDTO
    {
        TaskID = task.TaskID,
        Title = task.Title,
        Description = task.Description,
        DateCreated = task.DateCreated,
        IsClosed = task.IsClosed,
        CompanyID = companies.Where(y => task.CompanyID == y.CompanyID).SingleOrDefault().Identifier
    };
CompanyID = companies.Where(y => task.CompanyID == y.CompanyID).SingleOrDefault().Identifier