23

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

我们需要[HttpPost][HttpGet]属性的using System.Web.Mvc;命名空间 。所以我在我的控制器中添加了命名空间。但是我需要在我的控制器中添加另一个命名空间 以进行httpsresponseexpoction错误处理。我在命名空间中添加。这时候是不行的。using System.Web.Mvc;using System.Web.Http;System.Web.Mvc;

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

4

4 回答 4

43

您收到此异常的原因是因为HttpGetAttribute2 个不同的命名空间中有 2 个不同的类:

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

当您导入第二个命名空间时,编译器不再能够区分您所指的 2 个类中的哪一个,因为这 2 个命名空间在范围内。

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

但我需要使用 System.Web.Http 添加另一个命名空间;用于我的控制器中的 httpsresponseexpoction 错误处理

为什么需要在 ASP.NET MVC 控制器中使用它?通常这是你应该在 Web API 控制器中做的事情。

但是,如果由于某种原因需要混合 2,则必须通过完全限定它来明确指定需要使用的属性:

[System.Web.Mvc.HttpGet]
public ActionResult About()
{
    ViewBag.Message = "Your app description page.";
    return View();
}
于 2013-10-11T06:14:27.537 回答
1

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

Nuget 选择了能够满足新包的依赖要求的最低 MVC 版本。这意味着以前的引用(对 MVC 5)被替换为较低版本的引用(对 MVC 3)。

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

于 2017-01-27T19:11:02.807 回答
1

这是该问题的解决方案,请尝试....

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

        return View();
    }
于 2017-11-28T09:17:14.783 回答
0

我在使用 .NET Core 的 OS X 上遇到了这个问题。我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"
      },
...
}
于 2016-08-12T06:02:50.700 回答