Подтвердить что ты не робот

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

У меня есть одна проблема в MVC.

В настоящее время я работаю в 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 в моем контроллере. Си я добавил в пространство имен. В это время System.Web.Mvc; не работает.

Я получил эту ошибку: Тип или имя пространства имен HttpGet не удалось найти. Зачем? что-либо отношение между System.Web.Mvc и System.Web.Http для HttpGet?

4b9b3361

Ответ 1

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

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

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

В основном Microsoft дублировала все классы, существовавшие в ASP.NET MVC для веб-API, но поместила их в другое пространство имен. В принципе, вы не должны смешивать эти пространства имен.

Но мне нужно добавить другое пространство имен с помощью System.Web.Http; для Обработка ошибок httpsresponseexpection в моем контроллере

Зачем вам нужно использовать это в ASP.NET MVC-контроллере? Обычно это то, что вы должны делать в контроллере веб-API.

Но если по какой-то причине вам нужно смешать 2, вам нужно будет явно указать, какой атрибут вам нужно использовать, полностью откорректировав его:

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

Ответ 2

Для записи у меня была аналогичная проблема в библиотеке классов со ссылкой на MVC. Я установил пакет nuget в библиотеке классов, который сам имел зависимость от MVC (примечание: новый пакет был: RazorGenerator.Mvc). Раньше библиотека классов полагалась на ссылку Sytem.Web.Mvc.dll, добавленную с помощью диалога "Добавить ссылку", а не на один, установленный с помощью пакета nuget "Microsoft.AspNet.Mvc".

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

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

Ответ 3

Я столкнулся с этой проблемой в OS X, используя .NET Core. Я потерял запись для 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"
      },
...
}

Ответ 4

Вот решение для этой проблемы попробуйте...

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

        return View();
    }