c# - mvc - post asp net
El tipo o nombre de espacio de nombres ''HttpGet'' no se pudo encontrar cuando se agrega el espacio de nombres ''System.Web.Http'' (4)
Tengo un problema en MVC.
Actualmente estoy trabajando en MVC y la versión es MVC4. Y tengo 2 Método ActionResult, ver más abajo
[HttpGet]
public ActionResult About()
{
ViewBag.Message = "Your app description page.";
return View();
}
[HttpPost]
public ActionResult About(ModelName ccc)
{
ViewBag.Message = "Your app description page.";
return View();
}
Necesitamos el using System.Web.Mvc;
espacio de nombres para los atributos [HttpPost] y [HttpGet] . Así que agregué el using System.Web.Mvc;
espacio de nombres en mi controlador. Pero necesito agregar otro espacio de nombres using System.Web.Http;
para el manejo de errores httpsresponseexpection en mi controlador .Si lo agregué en el espacio de nombres. En este momento System.Web.Mvc;
no está trabajando .
Recibí este error: No se pudo encontrar el tipo o el nombre de espacio de nombres ''HttpGet'' . Por qué ? ¿Hay alguna relación entre System.Web.Mvc y System.Web.Http para HttpGet?
Aquí está la solución para ese problema, inténtalo ...
[System.Web.Mvc.HttpGet]
public ActionResult About()
{
ViewBag.Message = "Your app description page.";
return View();
}
La razón por la que está obteniendo esta excepción es porque hay 2 clases HttpGetAttribute
diferentes en 2 espacios de nombres diferentes:
El primero se utiliza en los controladores MVC de ASP.NET y el segundo en los controladores de API web de ASP.NET.
Cuando importó el segundo espacio de nombres, el compilador ya no puede desambiguar a cuál de las 2 clases se refiere porque los 2 espacios de nombres están dentro del alcance.
Básicamente, Microsoft duplicó todas las clases que existían en ASP.NET MVC para la API web, pero las colocó en diferentes espacios de nombres. Básicamente no debes mezclar esos espacios de nombres.
Pero necesito agregar otro espacio de nombres usando System.Web.Http; para el manejo de errores httpsresponseexpection en mi controlador
¿Por qué necesitarías usar esto en un controlador MVC de ASP.NET? Normalmente, eso es algo que debería hacer en un controlador de API web.
Pero si, por algún motivo, necesita mezclar los 2, deberá especificar explícitamente qué atributo debe usar al calificarlo por completo:
[System.Web.Mvc.HttpGet]
public ActionResult About()
{
ViewBag.Message = "Your app description page.";
return View();
}
Me encontré con este problema en OS X usando .NET Core. Me faltaba una entrada para Microsoft.AspNetCore.Mvc
en mi project.json
.
Antes de:
{
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.0",
"type": "platform"
},
...,
"Microsoft.Extensions.Configuration.CommandLine": "1.0.0"
},
...
}
Después:
{
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.0",
"type": "platform"
},
...,
"Microsoft.AspNetCore.Mvc": "1.0.0",
"Microsoft.Extensions.Configuration.CommandLine": "1.0.0"
},
...
}
Para el registro, tuve un problema similar en una biblioteca de clases con una referencia a MVC. Instalé un paquete nuget en la biblioteca de clases que a su vez dependía de MVC (nota: el nuevo paquete era: RazorGenerator.Mvc). Anteriormente, la biblioteca de clases se basaba en una referencia Sytem.Web.Mvc.dll agregada usando el diálogo ''Agregar referencia'' en lugar de uno instalado a través del paquete nuget "Microsoft.AspNet.Mvc".
Nuget eligió la versión más baja de MVC que cumpliría los requisitos de dependencia del nuevo paquete. Eso significó que la referencia anterior (a MVC 5) se reemplazó con una referencia de versión inferior (a MVC 3).
La actualización de la versión MVC en la biblioteca de clases usando nuget resolvió el problema.