Member 12475524 Ответов: 2

Тот же код работает в другом проекте, но здесь он даст эту ошибку, как устранить ошибку.


Получение этой ошибки упоминается ниже.


Ошибка сервера в приложении'/'.
Для этого объекта не определен конструктор без параметров.
Описание: необработанное исключение возникло во время выполнения текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.MissingMethodException: для этого объекта не определен конструктор без параметров.

Ошибка Источника:

Необработанное исключение было сгенерировано во время выполнения текущего веб-запроса. Информацию о происхождении и местоположении исключения можно определить с помощью приведенной ниже трассировки стека исключений.

трассировка стека:


[MissingMethodException: для этого объекта не определен конструктор без параметров.]
System.RuntimeTypeHandle.Метод createinstance(типа объектом типа runtimetype, publicOnly логический, Булев параметр nocheck, логическое и amp; canBeCached, RuntimeMethodHandleInternal&амп; конструктор, логическое и amp; bNeedSecurityCheck) +0
Системы.Объектом типа runtimetype.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +113
Системы.Объектом типа runtimetype.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +232
Система.Активатор.CreateInstance(тип type, Boolean nonPublic) +83
Система.Активатор.CreateInstance(тип type) +66
System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, тип controllerType) +55

[InvalidOperationException: произошла ошибка при попытке создать контроллер типа 'SAIJobs.Web.Controllers.AccountController'. Убедитесь, что контроллер имеет открытый конструктор без параметров.]
System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, тип controllerType) +178
System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, тип controllerType) +77
System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +88
Системы.Веб.В MVC.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController&Controller, IControllerFactory&Factory) +191
Системы.Веб.В MVC.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, состояние объекта) +50
Системы.Веб.В MVC.MvcHandler.BeginProcessRequest(свойство HttpContext объект HttpContext, объект asynccallback обратного вызова, состояние объекта) +48
Системы.Веб.В MVC.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(свойство HttpContext контекст, объект asynccallback КБ, объекта дополнительные данные [extradata]) +16
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +301
Системы.Веб.Класса HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

Информация о версии: Microsoft .NET Framework версия:4.0.30319; ASP.NET версия:4.0.30319.34209

Что я уже пробовал:

использование SAIJobs.Web.Models;
использование System.Linq;
использование системы.Нарезание резьбы.Задачи;
использование System.Web.Mvc;
использование SAIJobs.Core.Идентичность;
использование SAIJobs.Core.DomainModels.Идентичность;
использование System.Net.Mail;
использование SAIJobs.Web.Common;
использование системы.Рисование;
использование системы;
использование системы.Безопасность.Криптография;
использование System.Web.Security;
использование Microsoft.сеть САШ.Идентичность;
использование системы.Коллекции.Общий;
использование System.Net;
использование системы.ИО;

пространство имен SAIJobs.Web.Controllers
{
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "None")]
публичный класс AccountController : контроллер
{
частная IApplicationUserManager _userManager;

public AccountController(IApplicationUserManager userManager)
{ _userManager = диспетчер пользователей; }
[Атрибута allowanonymous]
Регистрация общественная ActionResult ()
{
строка salt = CreateSalt(saltSize);
Сессия["соль"] = Соль;
возвращение смотреть();
}

// Пост: /аккаунт/зарегистрироваться
[HttpPost, AllowAnonymous, ValidateAntiForgeryToken]
публичная асинхронная задача<actionresult> Register(модель RegisterViewModel)
{
строка salt = CreateSalt(saltSize);
пробовать
{
строка realCaptcha = Session["captcha"].Метод toString();
если (модель.Captcha == realCaptcha)
{
строка saltval = Session["соль"].Метод toString();
Сессия["соль"] = Соль;
модель.Captcha = null;

var fistPass = AESEncrytDecry.DecryptStringAES(model.Hid1);
var cnfrPass = AESEncrytDecry.DecryptStringAES(model.Hid2);

var enypass = fistPass.Substring(24);
модель.Hid1 = AESEncrytDecry.DecryptStringAES(enypass);

var enycnfrpass = cnfrPass.Substring(24);
модель.Hid2 = AESEncrytDecry.DecryptStringAES(enycnfrpass);

if ((saltval != fistPass.Substring(0, 24)) || (saltval != cnfrPass.Substring(0, 24)))
{
ModelState.AddModelError("", "неудачная попытка еще раз.");
обратный вид(модель);
}

if (ModelState.Функция IsValid)
{
var _profileController = DependencyResolver.Текущий.GetService<userprofilecontroller>();
ApplicationUserProfile _profile = новый ApplicationUserProfile();
_профиль.FName = модель.имя пользователя;

var user = new AppUser { UserName = model.Электронная почта, электронная почта = модель.Электронная почта, номер телефона = модель.Номер телефона };
ВАР результат = ждут _userManager.CreateAsync(пользователь, модель.Hid1);

если (результат.Преуспевший)
{
_профиль.LoginId = user.Id;
ждите _profileController.Создать(_profile);

_userManager.AddToRole(пользователь.Id, "Клиент");



var code = await _userManager.GenerateEmailConfirmationTokenAsync(пользователь.Айди);
Вар по указанному адресу callbackurl = URL-адрес.Действий("ConfirmEmail", "счет", новый { идентификатор пользователя = Пользователь.Id, код }, запрос.Url == null ? "": Запрос.URL-адрес.Схема);
строка msg = "Пожалуйста, подтвердите свою учетную запись, перейдя по этой ссылке: ссылка";
ждите _userManager.SendEmailAsync(пользователь.Id, "подтвердите свой аккаунт", msg);

Видовой мешок.Ссылка = callbackUrl;
var domainname = модель.Email.Split('@'); ;
ViewBag.link1 = имя домена[1];
return View("DisplayEmail");
}
AddErrors(результат);
}
}
еще
{
Сессия["соль"] = Соль;
модель.Captcha = null;
ModelState.AddModelError("", "код Captcha неверен.");
обратный вид(модель);
}
}
catch (исключение e)
{
Сессия["соль"] = Соль;
модель.Captcha = null;
ModelState.AddModelError("", "неудачная попытка еще раз.");
// Если мы зашли так далеко, то что-то не получилось, повторная форма отображения
обратный вид(модель);
}

Сессия["соль"] = Соль;
модель.Captcha = null;
ModelState.AddModelError("", "неудачная попытка еще раз.");
// Если мы зашли так далеко, то что-то не получилось, повторная форма отображения
обратный вид(модель);
}
}

2 Ответов

Рейтинг:
1

Richard Deeming

Цитата:
Произошла ошибка при попытке создать контроллер типа 'SAIJobs.Web.Controllers.AccountControllerУбедитесь, что контроллер имеет открытый конструктор без параметров.

Единственный конструктор на этом контроллере ожидает один параметр типа IApplicationUserManager.

Встроенная поддержка внедрения зависимостей в конструкторы контроллеров, по-видимому, была добавлена в ASP.NET MVC 5, поэтому убедитесь, что ваш проект не использует более раннюю версию. Если это так, вам понадобится специальная фабрика контроллеров.

Кроме того, убедитесь, что вы правильно настроили свой контейнер DI.

Инъекция зависимостей в систему ASP.NET MVC - введение | DotNetCurry[^]


Рейтинг:
0

OriginalGriff

Прочтите сообщение об ошибке:

No parameterless constructor defined for this object.

Это не могло бы быть намного яснее, если бы он попытался: вы пытались построить объект, используя конструктор без параметров, и там все определенные конструкторы требуют по крайней мере одного параметра.

На первый взгляд, это такая линия:
ApplicationUserProfile _profile = new ApplicationUserProfile();
(Это единственный прямой конструктор в вашем коде) - поэтому посмотрите на соответствующий класс и посмотрите, что вы можете узнать.


Richard Deeming

Основываясь на внутреннем исключении, на самом деле это конструктор контроллера, который вызывает проблему. :)