如何处理从HTTP POST发送的所有方式?

如何处理从HTTP POST发送的所有方式?,http,post,Http,Post,假设一个用户刚刚将数据发布到您的web应用程序中,您希望重新显示当前页面,并显示一条关于其成功或失败的消息。这变得复杂了 如果数据有效且用户需要html,则需要发出重定向,以便刷新不会导致它们重新发布。您希望重定向到referer(如果存在),并显示一条消息。如果他们不需要html,只需返回200 OK即可 如果数据无效且用户需要html,则需要重新呈现他们来自的页面,并出现可见错误,以便他们可以重新发布。要做到这一点,您必须运行上一个操作,并让它知道错误消息。要确定哪一个是前一个操作,可能需要

假设一个用户刚刚将数据发布到您的web应用程序中,您希望重新显示当前页面,并显示一条关于其成功或失败的消息。这变得复杂了

如果数据有效且用户需要html,则需要发出重定向,以便刷新不会导致它们重新发布。您希望重定向到referer(如果存在),并显示一条消息。如果他们不需要html,只需返回200 OK即可

如果数据无效且用户需要html,则需要重新呈现他们来自的页面,并出现可见错误,以便他们可以重新发布。要做到这一点,您必须运行上一个操作,并让它知道错误消息。要确定哪一个是前一个操作,可能需要将其作为隐藏参数包含在表单中。如果他们不需要html,您可以返回适用的4xx客户端错误

我发现自己跳这种愚蠢的舞蹈太多次了。因此,问题是:

1) 你将如何抽象整个过程,以便任何表单帖子都能利用它

2) 在您最喜欢的web框架中,实现这一点最容易维护或重复性最少的方法是什么

3) 在整个过程中,您是否有什么可以让它变得更简单的地方

想法1:永远不要在帖子上渲染,总是重定向。在请求之间的一瞬间将错误数据填充到会话中,然后将其清除,就像成功消息一样。这样,有效和无效的帖子可以以相同的方式处理


想法2:不要做任何正常的HTTP文章。只使用ajax。现在,您根本不必担心渲染或重定向。这只有在您已经有一个ajax应用程序的情况下才有用。

Idea 2已经过时了。这是一个可怕的想法,根本没有必要。AJAX很好,但不要做得太过分。更不用说,禁用Javascript的那部分用户呢


我认为你所想的(实际上并不知道)是模式。这是最好的做法,你应该遵循它。基本上,正如你所说,除了重定向,你从来不会对帖子做出任何回应。就通知而言,大多数情况下,由于特定的操作,您知道它们来自何处。如果不这样做,HTTP引用器是一个不错的选择。是的,它可以被禁用,但这大约是你用户的1%,如果是这样的话。就通知而言,会话非常适合于此。只需将代码和消息存储在当前会话中,并让模板知道它们。打印出消息(如果存在)并删除会话变量。

执行回发没有什么丢脸的,而且您无法真正避免回发,因为这是跨HTTP请求持久化数据的最简单方法。这或查询参数仍然是到服务器的另一个往返过程,因此它相当于同一件事,但需要进行一些权衡。不建议使用视图状态或会话


理想情况下,相同的页面将检查请求是否是回发,并处理其中的所有逻辑。因此,通常情况下,您的代码隐藏或带有表单的应用程序页面都会有一个部分来处理回发。

在不需要JavaScript的情况下制作像样的web应用程序是一项艰巨的工作。在这种情况下,我只打算使用AJAX。

我假设您不知道自己来自何方。我经常遇到这样的情况:我想从不同的页面发布到同一个url,以重复使用某个操作。如果数据无效,并且我正在渲染而不是重定向,我需要直觉地执行上一个操作。我想我还是可以从推荐人那里直觉到这一点。什么是回帖?什么是视图状态?