Не удалось создать экземпляр типа «Microsoft.AspNetCore.Http.HttpContext» - PullRequest
0 голосов
/ 04 октября 2019

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

public class ChatModel : PageModel
{
    public string UserName { get; set; }
    public ICollection<string> Espectators { get; set; }
    public ICollection<string> Chatters { get; set; }
    public string Mediator { get; set; }
    public Conversation Conversation{ get; set; }
    public Lazy<IConcurrentCaching> _cache { get; set; }

    public ChatModel()
    {
    }


    public ChatModel(string connString, string bulkTime, string username, ICollection<string> espectators = null, ICollection<string> chatters = null, string mediator = null, string conversationName = null)
    {
        //build the class, boring stuff
    }
    public void OnGet()
    {
    }
}

Эта модель является частью страницы Razor. Это мой контроллер для представления чата:

public class ChatController: Controller
{

    public ChatController()
    {

    }
    public IActionResult Chat(ChatModel model)
    {
        return View(model);
    }
}

И вызов для действия контроллера:

public IActionResult CreateChat(string username, string conversationName)
    {
        if (_cache.Value.Get<List<string>>("ChatList") == null)
        {
            _cache.Value.Set<List<string>>("ChatList", new List<string>(), 1440);
        }
        ChatModel model = new ChatModel(_op.Value.ConnectionString, _op.Value.BulkLoadCacheTimeInMinutes, username, conversationName: conversationName);
        model.Chatters.Add(username);
        return RedirectToAction("Chat","Chat", model);
    }

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

InvalidOperationException: не удалось создать экземпляр типа 'Microsoft.AspNetCore.Http.HttpContext'. Сложные типы, связанные с моделью, не должны быть абстрактными или значениями и должны иметь конструктор без параметров. Или же установите для свойства 'HttpContext' ненулевое значение в конструкторе Chatter.UI.Web.Views.Chat.ChatModel. Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.CreateModel (ModelBindingContext bindingContext)

Самое странное, что я даже не использую HttpContext в классе ChatModel. Я пытался использовать DI для внедрения IHttpContextAccessor в мой класс (хотя я не понимаю, как это могло бы помочь, но я видел это как решение онлайн);это не сработало. Я также пытался добавить синглтон при запуске для HttpContext, но безрезультатно. Будем весьма благодарны за любые идеи о том, что происходит.

1 Ответ

0 голосов
/ 07 октября 2019

Не следует объединять PageModel и Controller.

Как указывает ошибка, комплексные типы, привязанные к модели, не должны быть абстрактными или значениями и должны иметь конструктор без параметров. Для ChatModel, который наследует PageModel, это abstract class.

Создайте новый отдельный класс для использования в Controller action.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...