在这篇文章中,我们将为您详细介绍重定向PATCH和PUT路由rails5以使用POST的内容,并且讨论关于portal重定向原理的相关问题。此外,我们还会涉及一些关于node.js–为什么POST重定
在这篇文章中,我们将为您详细介绍重定向 PATCH 和 PUT 路由 rails 5 以使用 POST的内容,并且讨论关于portal重定向原理的相关问题。此外,我们还会涉及一些关于node.js – 为什么POST重定向到GET和PUT重定向到PUT?、POST,PUT和PATCH的区别、ruby-on-rails – ActionDispatch :: Routing :: RouteSet#调用Rails 4.1真的很慢、ruby-on-rails – Rails 3 – 使用OmniAuth设计 – 登录后重定向到/ users / sign_in的知识,以帮助您更全面地了解这个主题。
本文目录一览:- 重定向 PATCH 和 PUT 路由 rails 5 以使用 POST(portal重定向原理)
- node.js – 为什么POST重定向到GET和PUT重定向到PUT?
- POST,PUT和PATCH的区别
- ruby-on-rails – ActionDispatch :: Routing :: RouteSet#调用Rails 4.1真的很慢
- ruby-on-rails – Rails 3 – 使用OmniAuth设计 – 登录后重定向到/ users / sign_in
重定向 PATCH 和 PUT 路由 rails 5 以使用 POST(portal重定向原理)
如何解决重定向 PATCH 和 PUT 路由 rails 5 以使用 POST?
我目前正在向旧版 Rails 应用程序添加适当的路由,我似乎无法使用 PATCH、PUT 和 DELETE 路由,因为该应用程序目前的工作方式仅基于 GET 和 POST 路由。
所以我已经实现了 REST 路由,但目前,我需要重定向 PATCH、PUT 和 DELETE,直到我们可以更改它以使用正确的路由。
这是我在更新时得到的:
这些是自定义字段的路由#custom_fields
resources :custom_fields,except: %i[show destroy] do
get :disable,on: :member
collection do
get :list
get :edit
get :disable
get :enable
get :order_fields
post :process_order_fields
end
end
# remap wrong implmentation of paths
get ''/custom_fields/edit/:id'',to: redirect(''/custom_fields/%{id}/edit'')
我已经尝试了以下
post ''/custom_fields/:id'',to: redirect(custom_field_path(id: %{id}))
但没有骰子。
解决方法
我不明白你的问题。为什么您“需要”添加这些重定向?
如果你想定义一个像 POST
这样的遗留 post ''/custom_fields/:id''
路由,但在内部让它执行与非遗留 PUT/PATCH
请求相同的操作,那么只需将其定义为:
resources :custom_fields,except: %i[show destroy] do
post :update,on: :member
# ...
end
此外,在您尝试时将其定义为重定向是无效,according to the HTTP specification:
如果在响应 GET 或 HEAD 以外的请求时收到 302 状态码,除非用户确认,否则用户代理不得自动重定向请求,因为这可能会改变请求的条件发出。
node.js – 为什么POST重定向到GET和PUT重定向到PUT?
var express = require('express') var app = express() app.get('/test',function (req,res,next) { res.send('hello!') }) app.post('/test',next) { res.redirect('/test') }) app.put('/test',next) { res.redirect('/test') }) app.listen(5001) // GET /test -> 'hello!' // POST /test -> 'hello!' // PUT /test -> ERR_TOO_MANY_REDIRECTS
POST重定向到GET,但PUT重定向到PUT.是否可以使PUT重定向到GET(与POST相同)?
解决方法
app.put('/test',function(req,next) { res.redirect(303,'/test') // Notice the 303 parameter })
默认情况下,Express使用HTTP代码302进行重定向.根据HTTP specification,这可以防止POST / PUT请求被重定向为POST / PUT请求,并解释您在代码中观察到的内容:
If the 302 status code is received in response to a request other than
GET or HEAD,the user agent MUST NOT automatically redirect the
request unless it can be confirmed by the user,since this might
change the conditions under which the request was issued.
另一方面,如果使用303重定向,则允许将POST / PUT请求重定向为POST / PUT请求,如this great SO answer中所述:
303: Redirect for undefined reason. Typically,‘Operation has completed,continue elsewhere.’ Clients making subsequent requests for this resource should not use the new URI. Clients should follow the redirect for POST/PUT/DELETE requests.
POST,PUT和PATCH的区别
1. GET方法用于获取资源,不应有副作用,所以是幂等的。
比如:GET http://www.bank.com/account/123456,不会改变资源的状态,不论调用一次还是N次都没有副作用。请注意,这里强调的是一次和N次具有相同的副作用,而不是每次GET的结果相同。
GET http://www.news.com/latest-news这个HTTP请求可能会每次得到不同的结果,但它本身并没有产生任何副作用,因而是满足幂等性的。
2. DELETE方法用于删除资源,有副作用,但它应该满足幂等性。
比如:DELETE http://www.forum.com/article/4231,调用一次和N次对系统产生的副作用是相同的,即删掉id为4231的帖子;因此,调用者可以多次调用或刷新页面而不必担心引起错误。
3. POST和PUT的区别容易被简单地误认为“POST表示创建资源,PUT表示更新资源.但实际上两者都可以用来创建或是更新数据.单从技术上来说,他们并没有什么区别.但是在HTTP规范中POST是非等幂的,多次调用会产生不同的结果,
比如:创建一个用户,由于网络原因或是其他原因多创建了几次,那么将会有多个用户被创建.而PUT id/456则会创建一个id为456的用户,多次调用还是会创建的结果是一样的,所以PUT是等幂的.
4. PATCH一般是用来局部更新资源的,假设我们有一个UserInfo,里面有userId, userName, userGender等10个字段。可你的编辑功能因为需求,在某个特别的页面里只能修改userName,这时候的更新怎么做?
人们通常(为徒省事)把一个包含了修改后userName的完整userInfo对象传给后端,做完整更新。但仔细想想,这种做法感觉有点二,而且真心浪费带宽(纯技术上讲,你不关心带宽那是你土豪)。
于是PATCH诞生,只传一个userName到指定资源去,表示该请求是一个局部更新,后端仅更新接收到的字段。
而PUT虽然也是更新资源,但要求前端提供的一定是一个完整的资源对象,理论上说,如果你用了PUT,但却没有提供完整的UserInfo,那么缺了的那些字段应该被清空.另外PUT会有一个create操作,加入更新的id不存在,会进行创建,而PATCH则没有这个.
参考链接:https://www.jianshu.com/p/bee85cf4e33a
ruby-on-rails – ActionDispatch :: Routing :: RouteSet#调用Rails 4.1真的很慢
在我的Rails 4.1应用程序托管在Heroku,当负载上升,一些PUT请求得到真的很慢.今天最慢的是53秒.所有没有数据库(MongoDB)注册任何缓慢的查询.通常这个请求需要0.3ms这么快.无论有效载荷是什么,请求都是缓慢的.
在安装新的遗物之后,我们再多注意一下情况,但是我仍然不知道在哪里解决这个问题.
控制器中的代码很快,但是根据New Relic,缓慢的事情是Actiondispatch :: Routing :: RouteSet#call
这是一个新的遗物报告的转储:
Slowest components Count Duration % Actiondispatch::Routing::RouteSet#call 1 53,000 ms 100% Plugin::FetchablesController#update 1 38 ms 0% Rails::Rack::Logger#call 1 1 ms 0% Actiondispatch::Cookies#call 1 1 ms 0% ActiveSupport::Cache::Strategy::LocalCache::Middleware#call 1 0 ms 0% Rack::Runtime#call 1 0 ms 0% Total 53,000 ms 100%
一些可能有帮助或可能与此有关的其他信息.我有一个别名的路线,但我看不出为什么这应该是重要的.
namespace :plugin do resources :fetchables,path: :minables end
任何关于可能发生的事情的想法,以及我可以做些什么来解决这个问题,将不胜感激.
更新
所以看来这是与内存相关的.当我们升级到Performance Dynos时,我们已经停止看到这些错误.但这是在Heroku看来严重配置错误的东西.
解决方法
ruby-on-rails – Rails 3 – 使用OmniAuth设计 – 登录后重定向到/ users / sign_in
我用过了
def after_sign_in_path_for(resource_or_scope) store_location = session[:return_to] clear_stored_location (store_location.nil?) ? "/" : store_location.to_s end
在我的应用程序控制器中,并使用此代码创建了一个sessions_helper
def deny_access store_location redirect_to new_user_session_path end def anyone_signed_in? !current_user.nil? end private def store_location session[:return_to] = request.fullpath end def clear_stored_location session[:return_to] = nil end
为了解决这个问题,被重定向到“服务/”,我有使用Facebook和其他平台的身份验证的逻辑,我已经使用
skip_before_filter :store_location
在服务和其他控制器中,我不会作为位置存储.
Q1我现在遇到的问题是当我使用ajax并在模态窗口中渲染登录表单是当用户成功登录时,它被重定向到/ users / sign_in /.我没有一个用户控制器,并尝试使一个sessions_controller.rb并添加了skip_before …在那里,但它不起作用.
这是我的sign_in的路线
new_user_session GET /users/sign_in(.:format) {:action=>"new",:controller=>"devise/sessions"} user_session POST /users/sign_in(.:format) {:action=>"create",:controller=>"devise/sessions"} destroy_user_session GET /users/sign_out(.:format) {:action=>"destroy",:controller=>"devise/sessions"}
Q2当用户登出时,我尝试使用重定向
def after_sign_out_path_for(resource_or_scope) (session[:return_to].nil?) ? "/" : session[:return_to].to_s end
但是,这只会将我重定向到根页面.
我非常感谢任何帮助,
解决方法
Devise doesn’t redirect properly to stored location when using omniauth provider like facebook
在application_controller.rb中
def after_sign_in_path_for(resource_or_scope) if request.env['omniauth.origin'] request.env['omniauth.origin'] end end
关于重定向 PATCH 和 PUT 路由 rails 5 以使用 POST和portal重定向原理的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于node.js – 为什么POST重定向到GET和PUT重定向到PUT?、POST,PUT和PATCH的区别、ruby-on-rails – ActionDispatch :: Routing :: RouteSet#调用Rails 4.1真的很慢、ruby-on-rails – Rails 3 – 使用OmniAuth设计 – 登录后重定向到/ users / sign_in的相关信息,请在本站寻找。
本文标签: