ASP.NET MVC 2 - контроллер аккаунта не найден - PullRequest
0 голосов
/ 01 мая 2010

Я недавно создал приложение ASP.NET MVC 2, которое отлично работает в среде разработки. Однако при развертывании его на сервере (123-reg Premium Hosting) я могу получить доступ ко всем ожидаемым областям, кроме контроллера учетной записи (www.host.info/Account). Затем он пытается перенаправить на страницу Error.aspx (www.host.info/Shared/Error.aspx), которую он не может найти. Я проверил, что все мнения были опубликованы, и все они в правильном месте.

Кажется странным, что к двум другим контроллерам можно получить доступ без проблем, тогда как контроллер учетной записи не может быть найден. С тех пор я переименовал AccountController в SecureController и все зависимости безрезультатно.

Проблема с невозможностью найти страницу Error.aspx также возникает в среде разработки.

Любые идеи будут с благодарностью.

Спасибо

Chris

Ответы [ 2 ]

0 голосов
/ 01 мая 2010

Версия IIS на сервере - 7.0, над которой у меня нет контроля.

Код контроллера учетной записи все отлично работает в среде разработки, и код выглядит следующим образом:

[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 голосов
/ 01 мая 2010

1) Можете ли вы проверить опубликованную библиотеку DLL, чтобы убедиться, что тип существует в сборке? Применяются ли какие-либо специальные модификаторы к контроллеру учетной записи по сравнению с другими контроллерами (такими как определенные атрибуты, базовые классы, дополнительный код)?

2) Можете ли вы проверить, какой HttpMethod вы используете для запроса страницы? Я предполагаю, что это просто нормальный GET, но это может быть другой глагол, заставляющий вас не находить свой метод действия.

3) Используете ли вы какую-либо пользовательскую маршрутизацию или просто стандартную {controller}/{action}/{id} настройку?

...