【发布时间】:2014-05-14 03:30:48
【问题描述】:
我正在用 WebApi 替换一些旧的 web 服务代码,我遇到了这样的情况:代码曾经做这样的事情:
If Request.QueryString("value") = 1 Then
{do first action}
Else
{do second action}
End If
每个动作完全不同,每个动作都有一组独立的other查询字符串参数。
在我的新版本中,我将其建模为:
Public Function FirstAction(model as FirstActionModel) As HttpResponseMessage
和
Public Function SecondAction(model as SecondActionModel) As HttpResponseMessage
问题是传入的请求将只调用/api/actions?actiontype=1&params... 或/api/actions?actiontype=2&params... 并且参数不同。
我希望能够将带有actiontype=1 的请求路由到FirstAction,并将actiontype=2 路由到SecondAction。但是我不能使用路由,因为重要的值在查询字符串中,而不是路径。
我该怎么做?
【问题讨论】:
-
为什么不能像 "/api/actions/action1?params..." 这样的 url 添加动作类型?您需要将其作为 url 参数吗?
-
我不控制调用者,所以无法将参数从查询字符串切换到路径。
-
你可以做的是设置一个单独的动作来检查
actiontype参数并相应地重定向/调用其他动作。 -
我试过了,但是我失去了模型绑定。
-
也许你可以使用IHttpActionSelector接口?在您的自定义实现中,您可以访问 HttpControllerContext 对象并检查其 Request 属性以访问 url 参数。
标签: asp.net asp.net-mvc asp.net-mvc-3 model-binding