web-dev-qa-db-fra.com

Le nom de type ou d'espace de noms «HttpGet» est introuvable lors de l'ajout de l'espace de noms «System.Web.Http»

J'ai un problème dans MVC.

Actuellement, je travaille dans MVC et la version est MVC4. Et j'ai 2 méthode ActionResult, voir ci-dessous

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

Nous avons besoin de using System.Web.Mvc; espace de noms pour les attributs [HttpPost] et [HttpGet]. J'ai donc ajouté le using System.Web.Mvc; espace de noms dans mon contrôleur. Mais j'ai besoin d'en ajouter un autre Namespace using System.Web.Http; for httpsresponseexpection gestion des erreurs dans mon contrôleur .Si j'ai ajouté dans l'espace de noms. En ce moment System.Web.Mvc; ne fonctionne pas .

J'ai eu cette erreur: Le nom de type ou d'espace de nom 'HttpGet' est introuvable. Pourquoi ? quoi que ce soit relation entre System.Web.Mvc et System.Web.Http pour HttpGet?

21
Ramesh Rajendran

La raison pour laquelle vous obtenez cette exception est qu'il existe 2 classes HttpGetAttribute différentes dans 2 espaces de noms différents:

Le premier est utilisé dans les contrôleurs ASP.NET MVC et le second est utilisé dans les contrôleurs API Web ASP.NET.

Lorsque vous avez importé le deuxième espace de noms, le compilateur n'est plus en mesure de lever l'ambiguïté à laquelle des 2 classes vous faites référence car les 2 espaces de noms sont dans la portée.

Fondamentalement, Microsoft a dupliqué toutes les classes qui existaient dans ASP.NET MVC pour l'API Web, mais les a placées dans un espace de noms différent. Fondamentalement, vous ne devriez pas mélanger ces espaces de noms.

Mais j'ai besoin d'ajouter un autre namespace en utilisant System.Web.Http; pour la gestion des erreurs httpsresponseexpection dans mon contrôleur

Pourquoi auriez-vous besoin de l'utiliser dans un contrôleur ASP.NET MVC? Normalement, c'est quelque chose que vous devriez faire dans un contrôleur d'API Web.

Mais si pour une raison quelconque vous devez mélanger les 2, vous devrez spécifier explicitement quel attribut vous devez utiliser en le qualifiant complètement:

[System.Web.Mvc.HttpGet]
public ActionResult About()
{
    ViewBag.Message = "Your app description page.";
    return View();
}
39
Darin Dimitrov

Pour mémoire, j'ai eu un problème similaire dans une bibliothèque de classe avec une référence à MVC. J'ai installé un paquet nuget dans la bibliothèque de classes qui lui-même dépendait de MVC (note: le nouveau paquet était: RazorGenerator.Mvc). Auparavant, la bibliothèque de classes s'appuyait sur une référence Sytem.Web.Mvc.dll ajoutée à l'aide de la boîte de dialogue "Ajouter une référence" plutôt que sur une installation via le package de nuget "Microsoft.AspNet.Mvc".

Nuget a choisi la version MVC la plus basse qui répondrait aux exigences de dépendance du nouveau package. Cela signifiait que la référence précédente (à MVC 5) a été remplacée par une référence de version inférieure (à MVC 3).

La mise à niveau de la version MVC dans la bibliothèque de classes à l'aide de nuget a résolu le problème.

1
fordareh

Voici la solution à ce problème, essayez-le ....

 [System.Web.Mvc.HttpGet]
 public ActionResult About()
{
        ViewBag.Message = "Your app description page.";

        return View();
    }
1
Chandni Dimri

J'ai rencontré ce problème sur OS X en utilisant .NET Core. Il me manquait une entrée pour Microsoft.AspNetCore.Mvc dans mon project.json.

Avant:

{
    "dependencies": {
        "Microsoft.NETCore.App": {
          "version": "1.0.0",
          "type": "platform"
        },
        ...,
        "Microsoft.Extensions.Configuration.CommandLine": "1.0.0"
      },
...
}

Après:

{
    "dependencies": {
        "Microsoft.NETCore.App": {
          "version": "1.0.0",
          "type": "platform"
        },
        ...,
        "Microsoft.AspNetCore.Mvc": "1.0.0",
        "Microsoft.Extensions.Configuration.CommandLine": "1.0.0"
      },
...
}
0
Bill DeRose