首页 > 解决方案 > InvalidOperationException:无法创建“Microsoft.AspNetCore.Http.HttpContext”类型的实例

问题描述

当我尝试访问布局记录的用户配置文件时,会出现此错误。我想查看特定用户的详细信息,对其进行编辑或删除,因此我需要将 id 发送到视图,我正在尝试在控制器中使用此功能:

public IActionResult PerfilSocio( HttpContext contexto,int? id)
{
    int x = Convert.ToInt32(contexto.Session.GetInt32("UserId"));

    if (id == x)
    {

        foreach (var item in _context.Socios)
        {
            if (item.Idsocio == x)
            {
                var y = item;
                return View(y);

            }
        }

    }
    else
    {
        return View("NaoEncontrado");
    }
    return View();
}

在我看来,我有这个:

    @model WebApplication1.Models.Socios

@{
    ViewData["Title"] = "PerfilSocio";
}

<style>
    body {
        padding-top: 0px;
        background-color: gray;
        background-image: url();
        background-image: url();
        background-repeat: no-repeat;
    }
</style>
<h1 style="color:white;"> <b>LabGym</b> </h1>
<p style="text-align:right;color:white;">
    <i class="material-icons">&#9997;</i>
    <a href="~/Mensagems/VerMensagem"> Mensagens </a>
</p>
<br />

<div>

    <hr />
    <dl class="row">
        <dt class="col-sm-2">
            @*@Html.DisplayNameFor(model => model.Fotografia)*@
        </dt>
        <dd class="col-sm-10">
            <img src="~/Fotos/ + model.Fotografia " />
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Email)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Email)
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Telefone)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Telefone)
        </dd>

        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Sexo)
        </dt>
        <dd class="col-sm-10">
            @*@Html.DisplayFor(model => model.Sexo)*@
            @if (@Html.DisplayNameFor(model => model.Sexo) == "0")
            {
                <p>Feminino</p>
            }
            else
            {
                <p>Masculino</p>
            }
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Altura)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Altura)
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.NomeUtilizador)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.NomeUtilizador)
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.PesoInicial)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.PesoInicial)
        </dd>

        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Estado)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Estado)
        </dd>
    </dl>
</div>
<div>
    <a asp-action="Edit" asp-route-id="@Model.Idsocio">Editar perfil</a> |

</div>
<br />
<br />
<br />
<br />

有人可以帮我纠正这个错误吗?

InvalidOperationException:无法创建“Microsoft.AspNetCore.Http.HttpContext”类型的实例。模型绑定的复杂类型不能是抽象类型或值类型,并且必须具有无参数构造函数。或者,给“contexto”参数一个非空的默认值。

标签: c#htmlasp.net-core

解决方案


不要在您的操作中接受 HttpContext 作为参数,而是这样做。

public IActionResult PerfilSocio(int? id)
{
    int x = Convert.ToInt32(HttpContext.Session.GetInt32("UserId"));
    if (id == x)

HttpContext只是 Controller 类向您公开的当前 HttpContext。

如果尚未添加,则需要在 startup.cs 文件中进行以下更改

在 ConfigureServices() 方法中添加相关服务。

services.AddDistributedMemoryCache();
services.AddSession();

将 UseSession 添加到 Configure() 方法作为第一条语句之一。

app.UseSession();

推荐阅读