在 Phoenix 中没有重定向的 POST 操作中响应错误页面的正确方法是什么?
What's the correct way to respond to error page in a POST action without redirect in Phoenix?
我认为这是一个基本情况。我有一个 POST
操作,我想响应 403 状态并显示错误页面。
def signup(conn, params) do
...
conn
|> Plug.Conn.send_resp(:forbidden, "Forbidden")
|> Plug.Conn.halt()
end
但是,它会 return 403 但不会呈现错误页面。相反,它会在浏览器中抛出 Failed to load resource: the server responded with a status of 403 ()
并下载一个奇怪的 signup.dms
文件。
我设计了一个403.html.eex
,有谁知道如何正确显示吗?
您需要先 render
您的模板,然后再 halt
。它可能看起来像这样:
conn
|> put_status(:forbidden)
|> put_view(MyApp.ErrorView)
|> render("403.html")
|> halt()
在这种情况下,您需要创建 MyApp.ErrorView
并在 templates/error
中创建 403.html.eex
。
下载 *.dms
文件的原因是我没有为响应设置 Content-Type
。
def signup(conn, params) do
...
conn
|> Plug.Conn.update_resp_header("content-type", "text/plain", &(&1 <> "; charset=utf-8"))
|> Plug.Conn.send_resp(:forbidden, "Forbidden")
|> Plug.Conn.halt()
end
我认为这是一个基本情况。我有一个 POST
操作,我想响应 403 状态并显示错误页面。
def signup(conn, params) do
...
conn
|> Plug.Conn.send_resp(:forbidden, "Forbidden")
|> Plug.Conn.halt()
end
但是,它会 return 403 但不会呈现错误页面。相反,它会在浏览器中抛出 Failed to load resource: the server responded with a status of 403 ()
并下载一个奇怪的 signup.dms
文件。
我设计了一个403.html.eex
,有谁知道如何正确显示吗?
您需要先 render
您的模板,然后再 halt
。它可能看起来像这样:
conn
|> put_status(:forbidden)
|> put_view(MyApp.ErrorView)
|> render("403.html")
|> halt()
在这种情况下,您需要创建 MyApp.ErrorView
并在 templates/error
中创建 403.html.eex
。
下载 *.dms
文件的原因是我没有为响应设置 Content-Type
。
def signup(conn, params) do
...
conn
|> Plug.Conn.update_resp_header("content-type", "text/plain", &(&1 <> "; charset=utf-8"))
|> Plug.Conn.send_resp(:forbidden, "Forbidden")
|> Plug.Conn.halt()
end