asp.net – 在GET期间是否有规范/ RESTful方式向服务器发送查询
我正在设计一个(或多或少)RESTful内部Web服务,在ASP.NET和IIS上运行.我希望客户端能够在访问大型条目集合时将查询详细信息传递给服务器,使用
JSON以已知方式描述查询.问题是发送到服务器的查询会很复杂;它们可能包括聚合,过滤,映射 – 基本上是
the LINQ query operators支持的任何内容.这将导致代表查询的相对较大的JSON对象.
我面临的冲突是,虽然查询在语义上是REST世界中的GET,但在GET期间没有标准化的方法将大块数据传递给Web服务器.我想出了一些解决这个问题的方法. 选项1:在GET请求的正文中发送查询对象. GET /namespace/collection/ HTTP/1.1 Content-Length: 22 { /* query object */ } 显然,这是非标准的,某些软件可能会对具有正文的GET请求产生阻碍. (或者更糟糕的是,简单地剥离主体并在没有它的情况下处理请求,这将导致服务器返回不正确的结果集.) 选项2:使用非标准HTTP动词(可能是QUERY)而不是GET. QUERY /namespace/collection/ HTTP/1.1 Content-Length: 22 { /* query object */ } 虽然这不完全适合REST模式,但似乎(对我而言)是一种安全的替代方案,因为其他软件(例如使用WebDAV的任何软件)似乎使用非标准HTTP动词并取得了足够的成功. 选项3:将查询对象放在非标准HTTP标头中. GET /namespace/collection/ HTTP/1.1 ProjectName-Query: { /* query object */ } 此选项将请求保持为GET,但需要填充HTTP头中可能非常大的对象.我理解一些软件对HTTP标头设置任意长度限制,因此如果对象太大,这可能会导致问题. 选项4:使用POST动词并提供备用端点以进行查询. POST /namespace/collection/query HTTP/1.1 Content-Length: 22 { /* query object */ } 因为它使用标准动词而没有标准标题,所以保证此方法适用于所有场景.唯一的问题是它偏离了RESTful架构,我试图尽可能保持一致. 这些选项都不是正确的.我想知道的是哪种方式对我正在写的服务最有意义;它是一个内部Web服务(它永远不会暴露给公众)但它可以通过各种网络安全应用程序(防火墙,内容过滤器等)访问,我想坚持已知的开发风格,标准和架构尽我所能. 解决方法
我会使用选项4.很难将查询表示形式放在json中,以便将大型搜索请求放入URL中,尤其是针对搜索服务器.我同意,在这种情况下,它不适合Restful风格,因为URI无法识别资源. REST是一个指导原则.如果REST无法实现该场景,那么我想做一些可以解决问题的方法.这里使用POST不是很安静,但它似乎是正确的解决方案.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 如何使用Linq获取XML元素的值,即使是空的
- 为asp.net电子商务项目选择云
- asp.net signalR 专题—— 第二篇 对PersistentConnection持
- asp.net-mvc – 无法更改关系,因为一个或多个外键属性在MVC
- 身份电子邮件与破折号在Asp.Net身份
- asp.net dropdownlist – 在db值之前添加空行
- asp.net-mvc – 要查看的ASP.NET MVC 2控制器:IList还是Li
- asp.net-mvc – 从MVC版本1迁移后,ASP.NET MVC 2 actionlin
- asp.net-mvc – Ninject绑定在不同的控制器上
- asp.net-mvc – MVC导航到不同的控制器视图
- asp.net – 在RedirectToAction调用中传播QueryS
- Asp.net在运行时覆盖成员资格设置(asp.net mvc)
- 使用HtmlAnchor或ASP.NET HyperLink作为导航页内
- asp.net-mvc – asp.net mvc 4 – 谁调用_ViewSt
- asp.net – 当用户离开网站(ASPX)时,最后调用数据
- 在不加载实体的情况下更新ASP.NET MVC EF4中的相
- 在asp.net中动态构建SiteMapPath
- asp.net-mvc-3 – MVC3 – 复杂模型,属性具有相同
- asp.net-mvc – ASP.NET MVC:如何处理View中的N
- asp.net-mvc – Kendo UI Grid – 显示行号