处理具有相同参数列表的 Controller 方法的最佳方法是什么?
What is the best way to deal with Controller methods with the same parameter list?
我在控制器中编写具有单独 Get 和 Post 执行的方法时遇到了一个问题。通常,当我们针对模型构建控制器时,Get 和 Post 方法具有不同的参数定义,因为 Post 方法通常从表单捕获数据以保存到 model/database.
但我只是编写了一组原始的 Get/Post 方法,其中参数列表实际上是相同的。稍后我可以 post 我的示例代码来展示这一点,但这可能会分散我的问题;也就是说,我们可以承认总是有另一种方法来编写任何给定的方法。在这种情况下,我宁愿得到这个问题的答案。
如果 Get 和 Post 方法具有相同的参数定义,则为语法错误。所以我需要一种解决这个问题的方法。以下是我的逻辑。
由于我无法更改方法的名称(这是我的假设,可能无效),唯一的解决方法是更改 Get/Post 变化。所以我向 Get 方法添加了一个额外的参数,编译器很满意。我在调用方法时实际上并没有提供那个参数,当然我也没有在方法中使用参数,但它确实给了方法一个不同的参数定义,它解决了我的困境。
但我想问问其他人是否以不同的方式处理这个编码问题,这样我可能会学到更好的方法。可能是我对方法命名的假设也不正确。
在原始 post: 之后添加(@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
上面第一种方法returns出现'multiple definitions with identical signatures'错误。
我遵循了 CodeCaster 的 link,我相信这也是 Brad 的观点,并且我了解如何应用 ActionName 属性。我之前没有注意到这一点,因为我的编码还没有进入。
关于重复的问题,我确实寻找了其他 posts,我只是不知道如何正确地构建问题以使其出现在搜索中。这个 post 是不是应该删除?无论如何,我的问题得到了回答 - thx
您可以使用 ActionNameAttribute
并以不同的方式命名该方法。例如
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)
{
}
我在控制器中编写具有单独 Get 和 Post 执行的方法时遇到了一个问题。通常,当我们针对模型构建控制器时,Get 和 Post 方法具有不同的参数定义,因为 Post 方法通常从表单捕获数据以保存到 model/database.
但我只是编写了一组原始的 Get/Post 方法,其中参数列表实际上是相同的。稍后我可以 post 我的示例代码来展示这一点,但这可能会分散我的问题;也就是说,我们可以承认总是有另一种方法来编写任何给定的方法。在这种情况下,我宁愿得到这个问题的答案。
如果 Get 和 Post 方法具有相同的参数定义,则为语法错误。所以我需要一种解决这个问题的方法。以下是我的逻辑。
由于我无法更改方法的名称(这是我的假设,可能无效),唯一的解决方法是更改 Get/Post 变化。所以我向 Get 方法添加了一个额外的参数,编译器很满意。我在调用方法时实际上并没有提供那个参数,当然我也没有在方法中使用参数,但它确实给了方法一个不同的参数定义,它解决了我的困境。
但我想问问其他人是否以不同的方式处理这个编码问题,这样我可能会学到更好的方法。可能是我对方法命名的假设也不正确。
在原始 post: 之后添加(@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
上面第一种方法returns出现'multiple definitions with identical signatures'错误。
我遵循了 CodeCaster 的 link,我相信这也是 Brad 的观点,并且我了解如何应用 ActionName 属性。我之前没有注意到这一点,因为我的编码还没有进入。
关于重复的问题,我确实寻找了其他 posts,我只是不知道如何正确地构建问题以使其出现在搜索中。这个 post 是不是应该删除?无论如何,我的问题得到了回答 - thx
您可以使用 ActionNameAttribute
并以不同的方式命名该方法。例如
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)
{
}