2013-10-11 6 views
18

Ich habe ein Problem in MVC.Der Typ oder Namespace-Name 'HttpGet' konnte nicht gefunden werden, wenn 'System.Web.Http' Namespace

Derzeit arbeite ich in MVC und die Version ist MVC4. Und ich 2 Action Methode haben, siehe unten

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

Wir brauchen die using System.Web.Mvc; Namespace für [Httppost] und [HttpGet] Attribute. Also habe ich den Namespace using System.Web.Mvc; in meinem Controller hinzugefügt. Aber ich muss einen weiteren Namespace hinzufügen using System.Web.Http; für httpsresponsexpection Fehlerbehandlung in meinem Controller .Si ich im Namespace hinzugefügt. Zu diesem Zeitpunkt funktioniert System.Web.Mvc; nicht.

I got this error: The type or namespace name 'HttpGet' could not be found . Why ? anything relation between System.Web.Mvc and System.Web.Http for HttpGet ?

+0

Vielleicht ist Ihr Problem irgendwie im Zusammenhang mit dieser ist: http://stackoverflow.com/questions/10939239/visual-studio-2012-rc -could-not-load-type-system-web-http-routeparameter – jAC

+0

Okay! Aber sie haben dll Problem, aber ich habe nicht dll Problem, das alles funktioniert gut, aber wenn ich System.Web.Http Namespace dann HttpGet Attribut funktionierte nicht! –

+0

Bitte noch einmal meine Frage sehen !! –

Antwort

33

Der Grund, warum Sie diese Ausnahme bekommen ist, weil es zwei verschiedene HttpGetAttribute Klassen in 2 verschiedenen Namensräumen:

Die erste in ASP verwendet wird, .NET MVC-Controller und der zweite wird in ASP.NET-Web-API-Controllern verwendet.

Wenn Sie den zweiten Namespace importiert haben, kann der Compiler nicht mehr unterscheiden, auf welche der beiden Klassen Sie verweisen, da sich die beiden Namespaces im Geltungsbereich befinden.

Grundsätzlich dupliziert Microsoft alle Klassen, die in ASP.NET MVC für die Web-API vorhanden waren, aber sie in anderen Namespaces platziert. Grundsätzlich sollten Sie diese Namespaces nicht mischen.

But i need to add another one Namespace using System.Web.Http; for httpsresponseexpection error handling in my controller

Warum würden Sie brauchen diese Controller in einer ASP.NET MVC verwenden? Normalerweise sollten Sie dies in einem Web-API-Controller tun.

Aber wenn Sie aus irgendeinem Grund die 2 zu mischen benötigen Sie explizit angeben müssen, welches Attribut Sie in vollem Umfang nutzen müssen durch die Qualifikation:

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

danke für die nette Lösung. Es hat auch mein Problem gelöst. meine stimme +1 – imdadhusen

+0

Kann ich wissen, dass Sie die MVC-Referenz entfernen oder Sie beide Refrences mit Pfad verwendet? – gayan1991

+0

Manchmal möchte ich meinen Job ändern oder mich selbst oder etwas Ähnliches töten, um meinen Protest bei MICROSOFT zu zeigen. auf jeden Fall ... danke, Mann. – Setmax

0

Ich lief in dieses Problem auf OS X mit .NET Ader. Ich habe einen Eintrag für Microsoft.AspNetCore.Mvc in meinem project.json vermisst.

Vorher:

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

Nach:

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

Für das Protokoll, ich hatte ein ähnliches Problem in einer Klassenbibliothek mit einem Verweis auf MVC. Ich habe ein nugget-Paket in der Klassenbibliothek installiert, das selbst eine Abhängigkeit von MVC hatte (Hinweis: Das neue Paket war: RazorGenerator.Mvc). Zuvor basierte die Klassenbibliothek auf einer Sytem.Web.Mvc.dll-Referenz, die mit dem Dialogfeld "Referenz hinzufügen" hinzugefügt wurde, und nicht mit einer, die über das nuget-Paket "Microsoft.AspNet.Mvc" installiert wurde.

Nuget wählte die niedrigste MVC-Version, die die Abhängigkeitsanforderungen des neuen Pakets erfüllen würde.Das bedeutete, dass die vorherige Referenz (zu MVC 5) durch eine niedrigere Versionsreferenz (zu MVC 3) ersetzt wurde.

Das Aktualisieren der MVC-Version in der Klassenbibliothek mithilfe von nuget hat das Problem behoben.

0

ist hier Lösung für dieses Problem versuchen, es ....

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

     return View(); 
    } 
+1

Die Antworten sollten nicht nur Code enthalten, sondern auch eine Erklärung, warum dieser Code das ursprüngliche Problem löst. Bitte bearbeiten Sie Ihre Antwort und fügen Sie eine Erklärung hinzu. –