无法创建类型为“ Microsoft.AspNetCore.Http.HttpContext”的实例

时间:2019-10-04 03:50:05

标签: c# asp.net asp.net-mvc visual-studio asp.net-core

我正在一个聊天网站上,并且一段时间以来我一直在收到这个讨厌的错误,真的不知道可能是什么。 我有这个Model类:

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);
    }
}

并调用Controller动作:

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);
    }

由于某种原因,当我为Chat视图调用controller方法时,它引发以下异常:

  

InvalidOperationException:无法创建类型的实例   'Microsoft.AspNetCore.Http.HttpContext'。模型绑定的复杂类型   不得为抽象或值类型,并且必须具有无参数   构造函数。或者,将“ HttpContext”属性设置为   'Chatter.UI.Web.Views.Chat.ChatModel'中的非null值   构造函数。   Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.CreateModel(ModelBindingContext   bindingContext)

最奇怪的是,我什至没有在ChatModel类上使用HttpContext。我曾尝试使用DI将IHttpContextAccessor注入我的类中(尽管我看不出有什么帮助,但我已经将其视为在线解决方案);它没有用。我也曾尝试在HttpContext的启动时添加一个单例,但无济于事。任何关于正在发生的事情的想法都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您不应将PageModelController组合在一起。

如错误所示,模型绑定的复杂类型不能为抽象或值类型,并且必须具有无参数构造函数。对于继承ChatModel的{​​{1}}是PageModel类。

创建一个新的单独的类以用于abstract操作。