C# 类型或命名空间名称';HttpGet';添加时找不到';Http';名称空间

C# 类型或命名空间名称';HttpGet';添加时找不到';Http';名称空间,c#,asp.net-mvc,http-post,http-get,C#,Asp.net Mvc,Http Post,Http Get,我在MVC中有一个问题 目前我在MVC工作,版本是MVC4。我有两个ActionResult方法,见下文 [HttpGet] public ActionResult About() { ViewBag.Message = "Your app description page."; return View(); } [HttpPost] public ActionResult About(ModelName

我在MVC中有一个问题

目前我在MVC工作,版本是MVC4。我有两个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();
        }
我们需要
使用System.Web.Mvc命名空间。因此,我使用System.Web.Mvc添加了
我的控制器中的命名空间。但是我需要使用System.Web.Http添加另一个名称空间
for httpsresponseexpection error handling in my controller.Si我在命名空间中添加了。此时
System.Web.Mvc不工作

我遇到此错误:找不到类型或命名空间名称“HttpGet”。为什么?对于HttpGet,System.Web.Mvc和System.Web.Http之间有什么关系吗


出现此异常的原因是,在两个不同的命名空间中有两个不同的
HttpGetAttribute
类:

第一个用于ASP.NET MVC控制器,第二个用于ASP.NET Web API控制器

当您导入第二个名称空间时,编译器不再能够消除您引用的两个类中的哪个类的歧义,因为这两个名称空间都在范围内

基本上,Microsoft复制了ASP.NET MVC中存在的所有Web API类,但将它们放在不同的命名空间中。基本上,您不应该混合使用这些名称空间

但是我需要使用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();
}

我在使用.NETCore的OSX上遇到了这个问题。我在我的
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"
      },
...
}

作为记录,我在一个类库中遇到了一个类似的问题,涉及到MVC。我在类库中安装了一个nuget包,它本身依赖于MVC(注意:新包是:RazorGenerator.MVC)。以前,类库依赖于使用“添加引用”对话框添加的System.Web.Mvc.dll引用,而不是通过“Microsoft.AspNet.Mvc”nuget包安装的引用

Nuget选择了最低的MVC版本,以满足新包的依赖性要求。这意味着以前的参考(MVC5)被较低版本的参考(MVC3)所取代


使用nuget升级类库中的MVC版本解决了该问题。

以下是该问题的解决方案,请尝试

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

        return View();
    }

也许你的问题与此有关:好吧!但是他们有dll问题,但我没有dll问题,所有的都工作得很好,但是如果我添加System.Web.Http命名空间,那么HttpGet属性就不工作了!。请再看一次我的问题!!谢谢你的解决方案。这也解决了我的问题。我的投票+1我可能知道你删除了MVC引用,或者你使用了path的两个引用?有时我想换工作或者自杀,或者类似的东西来向微软表达我的抗议。无论如何……谢谢你。答案不仅应该包含代码,还应该解释为什么这个代码解决了原来的问题。请编辑您的答案并添加解释。