【问题标题】:How to customize HTML response in service stack exception?如何在服务堆栈异常中自定义 HTML 响应?
【发布时间】:2020-03-30 23:59:43
【问题描述】:

我有一个旧版应用程序,它使用隐藏的 iframe 将内容上传到网络服务器。在应用程序启动期间,document.domain 在浏览器中设置为特定值。来自服务器的任何要包含在 iframe 中的 html 响应也需要将 document.domain 设置为相同的值,否则将违反同源策略。在出现异常的情况下,服务堆栈将采用 DTO 并围绕它生成一些 HTML。但是,此 html 不包含将 document.domain 设置为所需值的一些脚本。那么我的问题是,是否可以自定义返回错误响应的 HTML?

查看文档:

https://docs.servicestack.net/error-handling#custom-exceptions

它说我们可以“抛出或返回一个 HttpError,让您自定义 Http 标头和状态代码以及 HTTP 响应正文,以准确获取您想要的内容”。我在“带有自定义响应 DTO 的 HttpError”(https://docs.servicestack.net/error-handling#httperror-with-a-custom-response-dto) 子标题下看到了使用自定义 DTO 的示例,该 DTO 将被输入服务堆栈,并将出现在 HTML 正文中。但是,我能否获得更多控制权,以便我可以自定义 HTML 以在脚本标记中包含一些自定义 javascript(document.domain 设置)?

【问题讨论】:

    标签: servicestack


    【解决方案1】:

    如果您想返回自己的自定义 HTML 错误页面,请查看Fallback Error Pages,您可以在其中指定使用#Script PagesServiceStack.Razor 时要返回的自定义错误页面。

    【讨论】:

    • 这看起来非常接近我想要的。我使用的是旧版本的 ServiceStack - 3.9.71.0。我找到了一些旧文档,看起来我会这样做:public override void Configure(Container container) { SetConfig(new EndpointHostConfig { GlobalHtmlErrorHttpHandler = new RazorHandler("/oops"), }); } 但是,实际上,我不想使用 RazorHandler。所以,我假设我可以创建自己的类来扩展 EndpointHandlerBase,覆盖 ProcessRequest 来做我想做的事?
    • 为了跟进任何期待未来的人,我做了上述(见评论)并且它奏效了。一个技巧是在 ServiceRunner 的 HandleException 覆盖中返回一个新的 HttpError
    猜你喜欢
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2023-02-17
    • 2021-06-07
    • 1970-01-01
    相关资源
    最近更新 更多