我遇到了在RESTful Asp.net MVC应用程序中使用查询字符串变量的问题。这会违反RESTful模式吗?
问题是Asp.net MVC使用默认路由,如:
/controller/action/id
我必须通过另一个控制器+动作组合,如:
/controller/action/id/controllerX/actionX
但如果我在应用程序的根目录下,这将无效,因为前三个参数将被省略,最后两个将被视为第一对。
而不是这个,我很想使用这种表示法:
/controller/action/id?Param=controllerX/actionX
哪个也适用于root
http://domain/?Param=controllerX/actionX
但这是RESTful吗?
我希望我的视图采用比使用PartialViews的普通内置更加模块化的方法。因为如果我有一个部分视图显示在许多页面上,我必须在每个控制器操作中为该特定部分视图添加视频数据,该操作返回使用该特定部分视图的视图。我认为这是一种错误的做事方式。控制器依赖于可能(或上帝禁止可能不)成为主视图一部分的部分视图。
渲染动作而不是部分视图来拯救。我使用自己的Html.RenderAction()
来调用某些控制器的动作,该动作只准备自己的数据。这很好。
第一个问题是HTTP方法被传播到所有RenderAction操作。所以我改变了它,我可以随心所欲地控制HTTP方法。无论主视图是否已回发(因此使用POST),某些操作可能始终使用GET。
问题是当这些操作返回具有自己的FORM元素的部分视图时。由于我的子操作无法直接发布(因为他们不知道要返回哪个视图),所以他们实际上会发布到视图中。表单中的所有子操作通常都会从主视图传播HTTP方法,因此它们实际上会进入回发操作执行。
问题是只有被回发的实际表单应该执行其POST操作。其他人应该只使用GET方法。这是我的第二个控制器/动作对发挥作用的地方。每个子动作表单都会发回
mainViewController/action/?PostForm=controller/action
其中第二个参数有助于确定哪个子动作渲染应该将POST方法传播给它。该特定表格将按其后期行动中的定义进行验证。
我希望通过一个具体的例子来解释我的问题。此问题与我的yesterday's question。
有关答案 0 :(得分:3)
如果此URL将导致返回相同的视图而不依赖于会话或cookie或客户端的先前浏览历史记录,那么是的,它将是您所谓的RESTful。