Rails 5 API - 如何在特定控制器上响应 HTML 作为异常?
Rails 5 API - How to respond with HTML on a specific controllers as an exception?
我有 Rails API 应用程序。并且 99% 的路线是 JSON 路线。但是,我想添加一条将以 HTML 响应的路由。我该怎么做?
这是我当前的设置,当我浏览路线时,我在屏幕上看到一串 HTML 标签。
class ApplicationController < ActionController::API
include ActionController::MimeResponds
end
class DocumentPublicController < ApplicationController
respond_to :html
def show
html = "<html><head></head><body><h1>Holololo</h1></body></html>"#, :content_type => 'text/html'
respond_to do |format|
format.html {render html: html, :content_type => 'text/html'}
end
end
end
有什么想法吗?
大多数新 API 只需要为 JSON 服务,但在 API 控制器中看到 respond_to
是很常见的。这是一个例子:
def show
html = "<html><head></head><body><h1>Holololo</h1></body></html>"
respond_to do |format|
format.html { render :json => html }
end
end
我们可以删除 respond_to
,但是如果您在没有 .json 的情况下点击 url,您会看到它认为您在日志中使用 HTML
Processing by PeopleController#index as HTML
如果您希望您的路由响应为 HTML,您可以在路由中默认为 HTML
namespace :api, :defaults => {:format => :html} do
namespace :v1 do
resources :people
end
end
所以你可以放弃 respond_to
让它有它的诅咒,然后默认你的路由生效为 HTML.
根据 Layouts and Rendering Guide:
When using html: option, HTML entities will be escaped if the string is not marked as HTML safe by using html_safe method.
所以你只需要告诉它字符串可以安全地呈现为 html:
# modified this line, though could be done in the actual render call as well
html = "<html><head></head><body><h1>Holololo</h1></body></html>".html_safe
respond_to do |format|
format.html {render html: html, :content_type => 'text/html'}
end
我有 Rails API 应用程序。并且 99% 的路线是 JSON 路线。但是,我想添加一条将以 HTML 响应的路由。我该怎么做?
这是我当前的设置,当我浏览路线时,我在屏幕上看到一串 HTML 标签。
class ApplicationController < ActionController::API
include ActionController::MimeResponds
end
class DocumentPublicController < ApplicationController
respond_to :html
def show
html = "<html><head></head><body><h1>Holololo</h1></body></html>"#, :content_type => 'text/html'
respond_to do |format|
format.html {render html: html, :content_type => 'text/html'}
end
end
end
有什么想法吗?
大多数新 API 只需要为 JSON 服务,但在 API 控制器中看到 respond_to
是很常见的。这是一个例子:
def show
html = "<html><head></head><body><h1>Holololo</h1></body></html>"
respond_to do |format|
format.html { render :json => html }
end
end
我们可以删除 respond_to
,但是如果您在没有 .json 的情况下点击 url,您会看到它认为您在日志中使用 HTML
Processing by PeopleController#index as HTML
如果您希望您的路由响应为 HTML,您可以在路由中默认为 HTML
namespace :api, :defaults => {:format => :html} do
namespace :v1 do
resources :people
end
end
所以你可以放弃 respond_to
让它有它的诅咒,然后默认你的路由生效为 HTML.
根据 Layouts and Rendering Guide:
When using html: option, HTML entities will be escaped if the string is not marked as HTML safe by using html_safe method.
所以你只需要告诉它字符串可以安全地呈现为 html:
# modified this line, though could be done in the actual render call as well
html = "<html><head></head><body><h1>Holololo</h1></body></html>".html_safe
respond_to do |format|
format.html {render html: html, :content_type => 'text/html'}
end