2013-10-11 37 views
18

我在MVC中遇到了一個問題。添加'System.Web.Http'命名空間時找不到類型或名稱空間名稱'HttpGet'

目前我在使用MVC和版本是MVC4。我有2 ActionResult的方法,請參見下面

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

我們需要using System.Web.Mvc;命名空間[HttpPost][HTTPGET]屬性。所以我在我的控制器中添加了using System.Web.Mvc;命名空間。但我需要添加另一個命名空間using System.Web.Http;httpsresponseexpection錯誤處理在我的控制器.Si我在命名空間中添加。此時System.Web.Mvc;不起作用。

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

也許您的問題以某種方式與此有關:http://stackoverflow.com/questions/10939239/visual-studio-2012-rc -could-not-load-type-system-web-http-routeparameter – jAC

+0

好的!但他們有DLL問題,但我沒有DLL問題,一切工作正常,但如果我添加System.Web.Http命名空間,然後HttpGet屬性不起作用! –

+0

請再一次看到我的問題! –

回答

33

你得到這個異常的原因是因爲有2個不同的HttpGetAttribute班在2個不同的命名空間:

率先在ASP中使用.NET MVC控制器,第二個用於ASP.NET Web API控制器。

當您導入第二個命名空間時,由於2個命名空間位於範圍內,因此編譯器不再能夠消除您引用的2個類中的哪一個。

基本上,Microsoft複製了ASP.NET MVC中爲Web API存在的所有類,但將它們放置在不同的名稱空間中。基本上你不應該混合這些命名空間。

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

爲什麼你需要在ASP.NET MVC控制器中使用它?通常情況下,您應該在Web API控制器中執行此操作。

但是,如果由於某種原因,你需要混合2你必須明確指定哪些屬性你需要使用完全限定它:

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

感謝您的好解決方案。它也解決了我的問題。我的投票+1 – imdadhusen

+0

我可以知道你刪除了MVC引用,或者你使用了兩個引用與路徑? – gayan1991

+0

有時候我想改變我的工作或者自殺或者類似於這些東西來向MICROSOFT表達我的抗議。任何方式..謝謝男人。 – Setmax

0

我跑進使用.NET在OS X這個問題核心。我在project.json中缺少Microsoft.AspNetCore.Mvc的條目。

前:

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

後:

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

爲了記錄在案,我在一個類庫類似的問題與到MVC的參考。我在類庫中安裝了一個Nuget包,該類本身依賴於MVC(注意:新包是:RazorGenerator.Mvc)。之前,類庫依賴於使用「添加引用」對話框添加的Sytem.Web.Mvc.dll引用,而不是通過「Microsoft.AspNet.Mvc」nuget包安裝的引用。

Nuget選擇了最低的MVC版本來滿足新軟件包的依賴性要求。這意味着之前的引用(對於MVC 5)被替換爲較低版本引用(對於MVC 3)。

使用nuget在類庫中升級MVC版本解決了問題。

0

下面是這個問題嘗試解決....

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

     return View(); 
    } 
+1

答案不僅應該包含代碼,還應該解釋爲什麼此代碼可以解決原始問題。請編輯您的答案並添加解釋。 –

相關問題