2013-10-11 1 views
18

У меня есть одна проблема в MVC.Тип или имя пространства имен «HttpGet» не удалось найти при добавлении пространства имен «System.Web.Http»

В настоящее время я работаю в 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 Namespace, то атрибут HttpGet не работал! –

+0

Пожалуйста, еще раз посмотри мой вопрос !! –

ответ

33

Причина вы получаете это исключение, потому что есть 2 разных HttpGetAttribute классов в 2-х разных пространствах имен:

Первый используется в ASP Контроллеры .NET MVC, а второй - в контроллерах веб-API ASP.NET.

Когда вы импортировали второе пространство имен, компилятор больше не может устранить, какой из двух классов вы ссылаетесь, поскольку 2 пространства имен находятся в области видимости.

В основном Microsoft дублирует все классы, существовавшие в ASP.NET MVC для веб-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

Я столкнулся с этой проблемой на OS X с использованием .NET ядро. Мне не хватало записи для Microsoft.AspNetCore.Mvc в моем project.json.

До:

{ 
    "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, добавленную с помощью диалога «Добавить ссылку», а не на один, установленный с помощью пакета nuget «Microsoft.AspNet.Mvc».

Nuget выбрал самую низкую версию MVC, которая соответствовала требованиям зависимости нового пакета.Это означало, что предыдущая ссылка (на MVC 5) была заменена ссылкой на более низкую версию (на MVC 3).

Обновление версии MVC в библиотеке классов с использованием nuget разрешило проблему.

0

Вот решение этой проблемы попробовать ....

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

     return View(); 
    } 
+1

Ответы должны содержать не только код, но и объяснение того, почему этот код решает исходную проблему. Измените свой ответ и добавьте объяснение. –

 Смежные вопросы

  • Нет связанных вопросов^_^