2010-05-01 4 views
0

J'ai récemment créé une application ASP.NET MVC 2, qui fonctionne parfaitement dans l'environnement de développement. Cependant, lorsque je le déploie sur le serveur (123-reg Premium Hosting), je peux accéder à toutes les zones attendues - à l'exception du contrôleur de compte (www.host.info/Account). Cela tente ensuite de rediriger vers la page Error.aspx (www.host.info/Shared/Error.aspx) qu'il ne peut pas trouver. J'ai vérifié que toutes les vues ont été publiées et qu'elles sont toutes au bon endroit.ASP.NET MVC 2 - Contrôleur de compte introuvable

Il semble bizarre que deux autres contrôleurs soient accessibles sans problème, alors que le contrôleur de compte est introuvable. J'ai depuis renommé le AccountController à SecureController, et toutes les dépendances, en vain.

Le problème de ne pas être en mesure de trouver la page Error.aspx se produit également sur l'environnement de développement.

Toutes les idées seraient grandement appréciées.

Merci,

Chris

+0

s'il vous plaît fournir plus d'informations – chester89

Répondre

0

1) Pouvez-vous vérifier la DLL qui a été publié pour vous assurer que le type existe dans l'ensemble? Des modificateurs spéciaux sont-ils appliqués au contrôleur de compte par rapport aux autres contrôleurs (tels que les attributs spécifiques, les classes de base, le code supplémentaire)?

2) Pouvez-vous vérifier quel HttpMethod vous utilisez pour demander la page? J'assume juste un GET normal, mais il peut venir en tant que verbe différent vous faisant ne pas trouver votre méthode d'action.

3) Utilisez-vous un routage personnalisé ou simplement l'installation standard {controller}/{action}/{id}?

+0

Merci pour la réponse, et juste le routage standard. Comment recommanderiez-vous d'inspecter la DLL? – Chris

+0

OK, donc je viens d'inspecter la DLL en utilisant .NET Reflector, et trouvé que le contrôleur de compte a été compilé et ajouté à la DLL. Rien de spécial n'a été fait sur ce contrôleur particulier, donc je ne sais pas pourquoi il n'est pas trouvé correctement! – Chris

+0

Pouvez-vous poster votre code AccountController VS un contrôleur de travail? Avez-vous vérifié qu'il n'y a pas de Typos? Existe-t-il différentes versions d'IIS entre dev et prod? – Tejs

0

La version d'IIS sur le serveur est 7.0, sur laquelle je n'ai aucun contrôle.

Le code du contrôleur de compte tout fonctionne parfaitement sur l'environnement de développement, et le code est le suivant: J'utilise juste une normale Http GET

[HandleError] 
public class SecureController : Controller 
{ 
    private UserManager manager; 

    public IFormsAuthenticationService FormsService { get; set; } 
    public IMembershipService MembershipService { get; set; } 

    protected override void Initialize(RequestContext requestContext) 
    { 
     if (FormsService == null) { FormsService = new FormsAuthenticationService(); } 
     if (MembershipService == null) { MembershipService = new AccountMembershipService(); } 

     base.Initialize(requestContext); 
    } 
    // Lazy man's Dependency Injection for now, use Ninject later! 
    public SecureController(UserManager mgr) { manager = mgr; } 
    public SecureController() : this(new UserManager(new PortfolioDataDataContext())) { } 

    // ************************************** 
    // URL: /Account/LogOn 
    // ************************************** 

    public ActionResult LogOn() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult LogOn(LogOnModel model, string returnUrl) 
    { 
     if (ModelState.IsValid) 
     { 
      if (MembershipService.ValidateUser(model.UserName, model.Password)) 
      { 
       FormsService.SignIn(model.UserName, model.RememberMe); 
       if (!String.IsNullOrEmpty(returnUrl)) 
       { 
        return Redirect(returnUrl); 
       } 
       else 
       { 
        return RedirectToAction("Index", "Home"); 
       } 
      } 
      else 
      { 
       ModelState.AddModelError("", "The user name or password provided is incorrect."); 
      } 
     } 

     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

    // ************************************** 
    // URL: /Account/LogOff 
    // ************************************** 

    public ActionResult LogOff() 
    { 
     FormsService.SignOut(); 

     return RedirectToAction("Index", "Home"); 
    } 

    // ************************************** 
    // URL: /Account/Register 
    // ************************************** 

    public ActionResult Register() 
    { 
     ViewData["PasswordLength"] = MembershipService.MinPasswordLength; 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Register(RegisterModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      // Attempt to register the user 
      MembershipCreateStatus createStatus = manager.CreateUser(model.UserName, model.Password, model.Email, model.FullName); 

      if (createStatus == MembershipCreateStatus.Success) 
      { 
       FormsService.SignIn(model.UserName, false /* createPersistentCookie */); 
       return RedirectToAction("Index", "Home"); 
      } 
      else 
      { 
       ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus)); 
      } 
     } 

     // If we got this far, something failed, redisplay form 
     ViewData["PasswordLength"] = MembershipService.MinPasswordLength; 
     return View(model); 
    } 

    // ************************************** 
    // URL: /Account/ChangePassword 
    // ************************************** 

    [Authorize] 
    public ActionResult ChangePassword() 
    { 
     ViewData["PasswordLength"] = MembershipService.MinPasswordLength; 
     return View(); 
    } 

    [Authorize] 
    [HttpPost] 
    public ActionResult ChangePassword(ChangePasswordModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      if (MembershipService.ChangePassword(User.Identity.Name, model.OldPassword, model.NewPassword)) 
      { 
       return RedirectToAction("ChangePasswordSuccess"); 
      } 
      else 
      { 
       ModelState.AddModelError("", "The current password is incorrect or the new password is invalid."); 
      } 
     } 

     // If we got this far, something failed, redisplay form 
     ViewData["PasswordLength"] = MembershipService.MinPasswordLength; 
     return View(model); 
    } 

    // ************************************** 
    // URL: /Account/ChangePasswordSuccess 
    // ************************************** 

    public ActionResult ChangePasswordSuccess() 
    { 
     return View(); 
    } 

} 
+0

Je ne vois pas une méthode d'action Index() - si vous demandez site.info/Account/, aucune méthode d'action n'existe pour gérer votre demande. – Tejs

+0

Désolé, j'aurais dû le mentionner plus tôt dans le post - j'essaye de demander site.info/Account/LogOn ou dans ce contexte - site.info/Secure/LogOn. En y réfléchissant, je vais essayer d'ajouter une action Index et une vue, puis voir ce qui se passe sur le serveur. – Chris