我有一个MVC控制器,链接到'创建'图。
我希望得到一个' GET'方法,为了做一些预处理和显示视图,然后一个' POST'方法,以便相应地更新数据库。
在阅读了一些指南和SO的答案之后,我认为以下内容是正确的解决方案。
<HttpGet>
Public Function Create() As ActionResult
'Do Stuff
Return View(New MyClass)
End Function
<HttpPost>
Public Function Create(MyObject As MyClass) As ActionResult
'Process results
End Function
然而,当我尝试访问时 http://my.site/MyController/Create,我得到一个例外:
System.Reflection.AmbiguousMatchException: The current request for action 'Create' on controller type 'MyControllerController' is ambiguous
好像引擎无法在两者之间做出决定,即使它们被标记为Get and Post。
我在这里做错了什么?
答案 0 :(得分:2)
您很可能使用了错误的属性。 MVC和WebApi对HttpGet和HttpPut使用相同的属性名称,但它们位于不同的名称空间中。
对于MVC:
System.Web.Mvc.HttpGetAttribute
对于WebApi:
System.Web.Http.HttpGetAttribute
如果您使用了错误的(使用带有WebApi的MVC属性,反之亦然,那么它会被忽略,您将收到您提到的错误消息。请确保您拥有正确的命名空间。
答案 1 :(得分:0)
您无法超载Controller方法。如果您真的希望保持动作名称相同,那么您可以做的事情如下:
<ActionName("Save")>
<HttpPost>
Public Function Create(MyObject As MyClass) As ActionResult
'Process results
End Function