我创建了一个搜索表单来查找MVC网站上的帖子。
表单类型应该是POST还是GET?
我知道获取可以为搜索添加书签等等。
使用GET的任何缺点?
谢谢你, 米格尔
答案 0 :(得分:1)
使用GET
动词,参数将在URL
上,GET
没有http请求正文。使用POST
时,参数位于请求正文中。使用GET
是好的,因为用户可以复制/粘贴此路径并在任何地方共享。我常常在这种approuch中使用GET。
有no limit for arguments on the URL of http。
The HTTP protocol does not place any a priori limit on the length of a URI. Servers MUST be able to handle the URI of any resource they serve, and SHOULD be able to handle URIs of unbounded length if they provide GET-based forms that could generate such URIs. A server SHOULD return 414 (Request-URI Too Long) status if a URI is longer than the server can handle (see section 10.4.15).
但是作为Jasen评论,浏览器可以有限制。
无论如何,使用GET
或POST
,当您使用此类approuch搜索数据库时,请记住使用方法请避免sql injection
。如果你要去ado.net
, use Parameters
。如果您正在使用ORM
它会照顾您。
答案 1 :(得分:1)
尽管GET
是查询数据的更常规解决方案,但在许多情况下,GET
太局限了,无法执行/search
。
问题的实质是一个GET
没有请求正文,因此,它无法处理更复杂的请求。本质上,GET
只能使用URL发送数据。 URL可以包含路径参数和查询参数,它们只是一组键值对,其中键和值均为string
类型。
相比之下,POST
还可在其主体中携带整个JSON文档。通过将自己限制为GET
,我们无法使用任何这些JSON功能,结果,我们无法将适当的对象或数组发送到后端。
语义真的有多有价值?为了遵守命名约定,我们是否应该遵循可能导致技术债务的变通办法?
如上所述,可能的问题之一是它无法处理数组。
例如,在网上商店中,您希望用户以列表形式展示产品目录。您想让您的用户能够使用复选框过滤列表来选择许多供应商。这将导致诸如selectedVendors = ["vendorA", "vendorB"]
之类的数组。
如果我们想遵守使用GET
的约定,那么我们必须找到一种可接受的解决方法,该解决方法使我们可以在不使用请求正文的情况下将供应商列表发送到后端。
只有查询参数可供使用时,可以将其建模为一堆布尔值:includeVendorA
,includeVendorB
,...
不幸的是,这很难维护且难以记录。
前端实际上可以执行多个查询。 即
/search?vendor=VendorA
)/search?vendor=VendorB
)的那些首先,它会降低性能,因为它需要多次往返。但是第二,它也破坏了支持分页的能力。
将增量索引添加到查询参数名称中。 (例如/search?vendor1=VendorA&vendor2=VendorB
)
同样,难以记录,并且OpenAPI也不支持。
如果我们只接受POST
更适合/search
,那么我们就不需要这些解决方法。
答案 2 :(得分:0)
除非您要修改数据,否则我会使用GET。如果您总是获取数据而不是操纵数据,我认为没有任何缺点。
答案 3 :(得分:0)
搜索不一定是帖子,你试图获取一些数据,而不是修改或插入。