我在控制器中编写具有单独的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
答案 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)
{
}