我在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();
}
我们需要{em> [HttpPost] 和 [HttpGet] 属性的using System.Web.Mvc;
命名空间。所以我在控制器中添加了using System.Web.Mvc;
命名空间。但我需要在我的控制器中为 httpsresponseexpection 错误处理添加另一个命名空间using System.Web.Http;
。我在命名空间中添加了。目前System.Web.Mvc;
无效。
我收到此错误:无法找到类型或命名空间名称“HttpGet”。为什么? HttpGet的System.Web.Mvc和System.Web.Http之间的任何关系?
答案 0 :(得分:38)
您获得此异常的原因是因为2个不同的命名空间中有2个不同的HttpGetAttribute
类:
第一个用于ASP.NET MVC控制器,第二个用于ASP.NET Web API控制器。
当您导入第二个命名空间时,编译器不再能够消除您引用的2个类中的哪个类的歧义,因为2个命名空间在范围内。
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();
}
答案 1 :(得分:1)
为了记录,我在类库中有一个类似的问题,引用了MVC。我在类库中安装了一个nuget包,它本身依赖于MVC(注意:新包是:RazorGenerator.Mvc)。以前,类库依赖于使用'添加引用'添加的Sytem.Web.Mvc.dll引用。对话而不是通过" Microsoft.AspNet.Mvc"安装的对话。 nuget包。
Nuget选择了最低的MVC版本,以满足新软件包的依赖性要求。这意味着先前的引用(对于MVC 5)被替换为较低版本引用(对于MVC 3)。
使用nuget升级类库中的MVC版本解决了这个问题。
答案 2 :(得分:1)
以下是该问题的解决方案试试....
[System.Web.Mvc.HttpGet]
public ActionResult About()
{
ViewBag.Message = "Your app description page.";
return View();
}
答案 3 :(得分: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"
},
...
}