gpt4 book ai didi

grails response.addHeader 或 setHeader 在 Controller 操作中触摸 response.setContentType 后在过滤器中是不可能的

转载 作者:行者123 更新时间:2023-12-04 16:00:41 24 4
gpt4 key购买 nike

在我的 Controller 操作中,我尝试将响应的 contentType 设置为如下。

class MyController {
def rss = {
response.setContentType('text/xml')
//I even tried setHeader('contentType') and also render(contentType:'text/xml',...)
render(template:'/displayRss', model:[:])
}
}

在过滤器中,我尝试为所有 Controller 和 Action 参数设置标题
class Filter {
def filters = {
all(controller:'*', action:'*'){
after = {
response.setHeader('Cache-Control', 'no-cache')
}
}
}
}

除了修改响应 contentType 的操作之外,所有其他操作都会添加 header 。似乎 response.isCommitted() 仅在该操作中返回为 true 。我是不是不了解渲染的基础知识......?

如果我使用 也不是这种情况渲染( View :'/abc')而不是 View (模板:'/abc',模型:[:])

提前致谢

最佳答案

看起来渲染模板会在调用时立即发送模板,因为它显示为已在过滤器中提交。由于已提交 header 已经发送并且事后设置 header 没有意义,因此过滤器中的 setHeader 被忽略。

我的猜测是,这是专门渲染模板的一个特性,在这些情况下,您需要在 Controller 操作中显式设置缓存 header ,或者改用 View 渲染。

关于grails response.addHeader 或 setHeader 在 Controller 操作中触摸 response.setContentType 后在过滤器中是不可能的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8720140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com