处理具有相同参数列表的 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 方法的最佳方法是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章