1

我正在编写一个实现 ASP.NET Web 应用程序,当我调用特定的 url 时,我想根据请求是 GET 还是 POST 调用不同的操作方法。

我尝试了两种不同的方法 - 首先我从一个具有以下操作方法的控制器开始:

<HttpGet>
Public Function Index() as ActionResult
...
End Function

<HttpPost>
Public Function Index() as ActionResult
...
End Function

...然后注册一个将 .action 设置为 URL 的“索引”的路由。这不会编译,因为这两个函数具有相同的签名。

接下来,我尝试将 Post 例程的名称更改为“Subscribe”,但这当然需要我为路由表提供两个不同的路由(以便指定新的操作方法名称)。如果我这样做,我会发现第二个被第一个抵消了。

我现在正在考虑回到我最初的想法,但为其提供一个虚拟参数,并将其指定为 UrlParameter.Optional。通过在 post 例程中将其作为参数,这将创建一个新的方法签名,我希望这会没问题。

不过,它闻起来有点脏 - 所以我想知道其他人会怎么做?

马丁。

附言。我现在尝试了肮脏的黑客,它确实有效。不过还是有兴趣听听别人的意见。

4

2 回答 2

3

重命名操作和使用ActionNameAttribute

<HttpGet>
<ActionName("Index")>
Public Function IndexGet() as ActionResult
...
End Function

<HttpPost>
<ActionName("Index")>
Public Function IndexPost() as ActionResult
...
End Function

但我不知道你的 POST 方法会做什么,因为它没有得到任何数据。POST 操作通常会获取一些要处理的发布数据,因此它可能还需要一些参数。当您添加它们时,您的两种方法可以共享相同的名称,因为它们的签名会不同(一种没有参数,一种有参数)。

于 2011-05-17T08:36:46.463 回答
1

只是一个简短的说明,以突出我最后采取的实际方法-尽管罗伯特上面的回答也是完全有效的......

我最终在 MapRoute 函数的约束参数上使用了“.httpMethodConstraint”属性,然后为所涉及的各种方法类型提供了单独的路由。

我认为,罗伯特的解决方案通常是一种更好的方法 - 但对于我的具体问题,采用映射不同路线的方法是我的技术主管的首选解决方案。

里面没有很多东西——除非我在一个大网站上工作,否则我会对创建大量的路由持保留态度,因为它们很快就会让人困惑。

为帮助干杯...

于 2011-05-20T16:05:37.483 回答