2013-02-21 139 views
2

我有这4类:HTTP错误401.0 - 未经授权

public class Personal 
     { 
      public int Id { get; set; } 
      public string Name { get; set; } 
     } 

public class LoginRepository 
    { 
     Context context = new Context(); 
     public Personal GetByUsernameAndPassword(Personal user) 
     { 
      return context.Personals.Where(u => u.Name==user.Name).FirstOrDefault(); 
     } 
    } 

public class LoginApplication 
    { 
     LoginRepository userRepo = new LoginRepository(); 
     public Personal GetByUsernameAndPassword(Personal user) 
     { 
      return userRepo.GetByUsernameAndPassword(user); 
     } 
    } 

public class SessionContext 
    { 
     public void SetAuthenticationToken(string name, bool isPersistant, Personal userData) 
     { 
      string data = null; 
      if (userData != null) 
       data = new JavaScriptSerializer().Serialize(userData); 

      FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, name, DateTime.Now, DateTime.Now.AddYears(1), isPersistant, data); 

      string cookieData = FormsAuthentication.Encrypt(ticket); 
      HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieData) 
      { 
       HttpOnly = true, 
       Expires = ticket.Expiration 
      }; 

      HttpContext.Current.Response.Cookies.Add(cookie); 
     } 

     public Personal GetUserData() 
     { 
      Personal userData = null; 

      try 
      { 
       HttpCookie cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName]; 
       if (cookie != null) 
       { 
        FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value); 

        userData = new JavaScriptSerializer().Deserialize(ticket.UserData, typeof(Personal)) as Personal; 
       } 
      } 
      catch (Exception ex) 
      { 
      } 

      return userData; 
     } 
    } 

而且在我的控制器我有这样的:

public class HomeController : Controller 
    { 
     LoginApplication userApp = new LoginApplication(); 
     SessionContext context = new SessionContext(); 
     public ActionResult Index() 
     { 
      return View(); 
     } 
     [HttpPost] 
     public ActionResult Index(Personal user) 
     { 
      var authenticatedUser = userApp.GetByUsernameAndPassword(user); 
      if (authenticatedUser != null) 
      { 
       context.SetAuthenticationToken(authenticatedUser.Name, false, authenticatedUser); 
       return RedirectToAction("Index", "Asp"); 
      } 
      return View(); 
     } 
    } 

但问题是这样的,即使我用正确的名称登录我看到此错误:

HTTP错误401.0 - 未授权 您没有权限查看此目录或页面。

我认为会议没有创建。 我该怎么办?

回答

3

它听起来像IIS配置,你不正确地处理请求/路由,所以而不是使用MVC路由来选择正确的控制器IIS会看到目录的路径并导致未经授权,因为目录列表被禁用。

如何设置它取决于您运行的IIS版本。从技术角度来看,配置基本上是相同的,但是自从管理控制台经历了从6到7的剧烈变化之后。如何在IIS7(+)中做到这一点已被非常不情愿地提出,而不是重写答案,我认为它服务于精神这个社区更好转发到answer

+0

那么,我该如何解决呢? – 2013-02-21 19:55:30

+0

@HamidReza看到我连接到的答案 – 2013-02-22 08:04:47

+0

非常感谢。收听它。) – 2013-02-22 11:29:47