如何使WebAPI-MVC的GET和POST方法明确无误

时间:2017-05-10 14:21:57

标签: asp.net-mvc vb.net asp.net-mvc-4 asp.net-web-api

我有一个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。

我在这里做错了什么?

2 个答案:

答案 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