1

我认为这是一个基本情况。我有一个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,有人知道如何正确显示它吗?

4

2 回答 2

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
于 2019-08-30T06:38:51.067 回答
0

你需要在render你的模板之前halt。它可能看起来像这样:

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

MyApp.ErrorView在这种情况下,您需要403.html.eextemplates/error.

于 2019-08-29T09:43:14.763 回答