使用相同参数列表处理Controller方法的最佳方法是什么?

时间:2015-02-04 15:54:33

标签: asp.net-mvc vb.net

我在控制器中编写具有单独的Get和Post执行的方法时遇到了一个问题。通常,当我们针对模型构建控制器时,Get和Post方法具有不同的参数定义,因为Post方法通常从表单捕获数据以保存到模型/数据库。

但我只编写了一组原始的Get / Post方法,其中参数列表实际上是相同的。我可以稍后发布我的示例代码来展示这一点,但这可能会分散我的问题;也就是说,我们可以承认,总是有另一种方法来编码任何给定的方法。在这种情况下,我宁愿得到这个问题的答案。

如果Get和Post方法具有相同的参数定义,则表示语法错误。所以我需要解决这个问题。以下是我的逻辑。

由于我无法更改方法的名称(这是我可能无效的假设),唯一的方法是更改​​Get / Post变体中的一个或另一个的参数定义。所以我在Get方法中添加了一个额外的参数,编译器很高兴。在调用方法时我实际上并没有提供该参数,当然我不在方法中使用参数,但它确实为方法提供了不同的参数定义,它解决了我的困境。

但我想询问其他人是否以不同的方式处理此编码问题,以便我可以学习更好的方法。可能是我对方法命名的假设也不正确。

在原帖后添加:(@CodeCaster,已吸取的教训)。我删除了内部代码,因为它没有关系:

Function ChannelTopicSelector(ByVal ChannelType As ChannelType, ByVal Topic As String) As ActionResult
  Return View()
End Function

<HttpPost()>
<ValidateAntiForgeryToken()>
Function ChannelTopicSelector(ByVal ChannelType As ChannelType, ByVal Topic As String) As ActionResult
  Return View()
End Function

上面的第一个方法返回'具有相同签名的多个定义'错误。

我遵循了CodeCaster的链接,我相信这也是Brad的观点,我理解ActionName属性是如何应用的。我之前没有注意到这一点,因为我的编码还没有进入。

关于重复的问题,我确实在寻找其他帖子,我只是不知道如何正确构建问题,以便在搜索中出现。该帖子应该删除吗?无论如何,我的问题得到了回答 - thx

1 个答案:

答案 0 :(得分:2)

您可以使用ActionNameAttribute,并以不同方式命名方法。 e.g。

<强> VB.NET

<ActionName("Foo")> _
Public Function Foo_GET(id As Int32) As ActionResult
End Function

<ActionName("Foo"), HttpPost> _
Public Function Foo_POST(id As Int32) As ActionResult
End Function

<强> C#

[ActionName("Foo")]
public ActionResult Foo_GET(Int32 id)
{
}

[ActionName("Foo"), HttpPost]
public ActionResult Foo_POST(Int32 id)
{
}