在Phoenix中没有重定向的情况下,在POST操作中响应错误页面的正确方法是什么?

时间:2019-08-29 05:53:17

标签: elixir phoenix-framework plug

我认为这是一个基本情况。我有一个POST操作,我想回复403状态并显示错误页面。

def signup(conn, params) do
  ...
  conn
  |> Plug.Conn.send_resp(:forbidden, "Forbidden")
  |> Plug.Conn.halt()
end

但是,它将返回403,但不会呈现错误页面。相反,它在浏览器中抛出了Failed to load resource: the server responded with a status of 403 (),并下载了一个奇怪的signup.dms文件。

我有一个设计好的403.html.eex,有人知道如何正确显示吗?

2 个答案:

答案 0 :(得分:1)

下载*.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

答案 1 :(得分:0)

render之前,您需要halt模板。看起来可能像这样:

conn
|> put_status(:forbidden)
|> put_view(MyApp.ErrorView)
|> render("403.html")
|> halt()

在这种情况下,您需要创建MyApp.ErrorView并在403.html.eex中创建templates/error