我正在开发一个REST应用程序,该应用程序使用uri重写器,它指向定义路由的选项元素。除了404响应之外,一切都有效:返回正确的页面但有200个标题,而不是404。
如果我返回一个字符串而不是html页面,则会发送404标头。如何返回带有404响应的html页面?
这就是我目前所拥有的:
xquery version "1.0-ml";
import module namespace rest = "http://marklogic.com/appservices/rest"
at "/MarkLogic/appservices/utils/rest.xqy";
import module namespace requests = "http://myrequests"
at "requests.xqy";
declare option xdmp:mapping "false";
declare variable $result := rest:rewrite($requests:options) ;
if (empty($result))
then (xdmp:set-response-code(404, "Not found"), '/FAIL.html' )
else
$result
答案 0 :(得分:1)
我认为最好不要在重写器本身内执行xdmp:set-response-code。您可以将fail.html更改为包含html(格式正确的xml)和xdmp:set-response-code的fail.xqy。您可以将它用于多种用途,并将代码和消息作为请求参数传递给重写器,只需将它们添加到重定向URL即可。
还应该可以利用错误处理程序,并从重写中抛出特定的错误消息,捕获error-handler.xqy中的错误消息,并使其返回特定的错误页面。虽然传递额外信息稍微尴尬,但这应该是可能的..
HTH!
答案 1 :(得分:0)
error-handler.xqy方法为您的休息服务提供了很大的灵活性和一些错误响应处理的良好封装。对于我开发的服务,我们创建了一个表,将来自服务器的特定500个错误代码映射到相应的http状态代码和消息,并一致地格式化响应主体。当你遇到想要处理为500以外的错误的错误时,它只是添加到映射表的问题。