web-dev-qa-db-ja.com

「System.Web.Http」名前空間を追加するときに、タイプまたは名前空間名「HttpGet」が見つかりませんでした

MVCには1つの問題があります。

現在、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();
        }

[HttpPost]および[HttpGet]属性のusing System.Web.Mvc;名前空間が必要です。そこで、コントローラーにusing System.Web.Mvc;名前空間を追加しました。しかし、私は別の名前空間を追加する必要がありますusing System.Web.Http; for httpsresponseexpectionコントローラーでのエラー処理現在、System.Web.Mvc;は機能していません。

このエラーが発生しました:型または名前空間名 'HttpGet'が見つかりませんでした。どうして ? HttpGetのSystem.Web.MvcとSystem.Web.Httpの関係は何ですか?

21

この例外が発生する理由は、2つの異なる名前空間に2つの異なるHttpGetAttributeクラスがあるためです。

1つ目はASP.NET MVCコントローラーで使用され、2つ目はASP.NET Web APIコントローラーで使用されます。

2番目の名前空間をインポートすると、2つの名前空間がスコープ内にあるため、コンパイラは2つのクラスのどちらを参照しているかを明確にすることができなくなります。

基本的に、MicrosoftはWeb API用にASP.NET MVCに存在するすべてのクラスを複製しましたが、異なる名前空間に配置しました。基本的に、これらの名前空間を混在させるべきではありません。

しかし、System.Web.Httpを使用して別の名前空間を追加する必要があります。コントローラーでのhttpsresponseexpectionエラー処理

なぜASP.NET MVCコントローラーでこれを使用する必要があるのですか?通常、これはWeb APIコントローラーで行うべきことです。

ただし、何らかの理由で2を混ぜる必要がある場合は、使用する必要がある属性を完全修飾して明示的に指定する必要があります。

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

記録については、MVCを参照するクラスライブラリで同様の問題がありました。 MVCに依存するnugetパッケージをクラスライブラリにインストールしました(注:新しいパッケージはRazorGenerator.Mvcでした)。以前は、クラスライブラリは、「Microsoft.AspNet.Mvc」ナゲットパッケージを介してインストールされたものではなく、「参照の追加」ダイアログを使用して追加されたSytem.Web.Mvc.dll参照に依存していました。

Nugetは、新しいパッケージの依存関係の要件を満たす最低のMVCバージョンを選択しました。つまり、以前の(MVC 5への)参照は(MVC 3への)より低いバージョンの参照に置き換えられました。

Nugetを使用してクラスライブラリのMVCバージョンをアップグレードすると、問題が解決しました。

1
fordareh

その問題の解決策を試してみてください。

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

        return View();
    }
1
Chandni Dimri

OS Xで.NET Coreを使用してこの問題に遭遇しました。 Microsoft.AspNetCore.Mvcproject.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"
      },
...
}
0
Bill DeRose