기본적으로 User.Identity.IsAuthenticated가 false이기 때문에 기본적으로 내 asp.net mvc 응용 프로그램에서 예외가 발생합니다.이 오류는 작업 주석과 관련된 아래의 코드로 인해 발생합니다 (아래 ** 표시) - 나는 그것이 일어나는 이유를 이해할 수 없으며, 어떤 도움을 주셔서 감사합니다. 나는 예외과 같이 던져 인증되지 않은 경우, 사용자를 인증 내 기본 컨트롤러의 사용자 지정 특성 내부 아래User.Identity.Name은 null이되지만 이유를 이해할 수 없음
코드 : User.Identity.IsAuthenticated + User.Identity를 일으키는
if (!httpContext.User.Identity.IsAuthenticated)
throw new NoAccessException("unauthorized user"); // invalid users are thrown out...
코드입니다. 널 (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,
});
}
참고 : 나는 dto.AllComments (된 IQueryable를) 다음 모든 것이 잘 작동 생략하면, 내 시스템 또는 더 중요한 User.Identitiy을 던져 만나지 correc 남아 t는 .... 나는 목록으로 변환하는 시도 - ..., 어쩌면 내 LINQ 방법에 문제가 내가 이상적으로 그러나 중 하나가 작동하지 않는 원하는 어떤
내 DTO :
public class TaskDTO
{
public int TaskID { get; set; }
public bool IsClosed { get; set; }
public string CompanyID { get; set; }
public string AssignedTo { get; set; }
public DateTime DateCreated { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public IQueryable<TaskCommentDTO> AllComments { get; set; }
}
public class TaskCommentDTO
{
public string CompanyID { get; set; }
public string UserID { get; set; }
public DateTime Timestamp { get; set; }
public string Comment { get; set; }
}
편집 :
protected override void Execute(System.Web.Routing.RequestContext requestContext)
{
base.Execute(requestContext);
}
: 지금 예외를 추적 한
예외가 발생되고, 나는 나 버그를 발견하는 데 도움 내 기본 컨트롤러에 아래의 코드를 오버라이드 0
페이지 로딩이 끝나면 요청 문맥을 체크 아웃 할 때이 코드가 다시 실행되었습니다.이 시점에서 "오류"및 "FileNotFound"를 발견 한 RouteData의 값에서이 시점에서 사용자도 역시 나도 꺼내집니다. ... 발견되지 않는 파일을 찾을 필요가 :(
디버깅을 시도하여 예외를 throw하는 줄을 정확히 확인 했습니까? 단계별로 시도해보고 변수를보고 어떤 일이 발생하는지 확인하십시오. –
예 - 내 필터가 실행 되 자마자 위의 그림과 같이 NoAccessException이 발생하고 추적하기 전에 추적 할 수 없습니다. 왜냐하면 어떤 필터가 내 필터보다 먼저 실행되는지 알 수 없기 때문입니다 ... 관련 코드를 제거하면 언급 한 것 외에도 모든 일에 대한 의견을 ... – Haroon
linq 쿼리는 괜찮아 보이나요? – Haroon