处理具有相同参数列表的 Controller 方法的最佳方法是啥? [复制]

Posted

技术标签:

【中文标题】处理具有相同参数列表的 Controller 方法的最佳方法是啥? [复制]【英文标题】:What is the best way to deal with Controller methods with the same parameter list? [duplicate]处理具有相同参数列表的 Controller 方法的最佳方法是什么? [复制] 【发布时间】:2015-04-04 05:31:38 【问题描述】:

我在对具有单独 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

上面的第一个方法返回'multiple definitions with same signatures'错误。

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

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

【问题讨论】:

当你说你不能改变方法的名字时,是因为 URL 必须保持不变吗?如果是这样,那么您可以使用ActionName 属性。 ***.com/q/6536559/11683 或GET and POST methods with the same Action name in the same Controller。 我不同意你的前提;代码通常比一堵墙更能说明问题。 将从现在开始添加代码... 【参考方案1】:

您可以使用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)


【讨论】:

您的响应示例也很有帮助,因为我不知道您可以在 '[...]' 中放置多个属性,或者在 VB 中为我放入 '<...>'。跨度> 很高兴听到。很抱歉,错过了 VB 标签。我也会发布等效的 VB.NET。

以上是关于处理具有相同参数列表的 Controller 方法的最佳方法是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Swagger使用--在一个Controller中使用相同(类似)参数的方法

重载与重写的区别

Java重载和重写的区别

问题1 重载和重写的区别

问题1 重载和重写的区别

controller函数中参数列表使用多个@RequestBody