Playframework 在.txt播放中出错!模板,用作.xml
我在一个简单的txt模板中遇到了一个非常奇怪的错误。当我将其作为XML提供时没有错误,因此错误与模板本身无关,也与涉及的路由无关。这是在玩虫子吗!(我使用的是1.2.4) 这是请求/robots.txt时的错误消息:Playframework 在.txt播放中出错!模板,用作.xml,playframework,Playframework,我在一个简单的txt模板中遇到了一个非常奇怪的错误。当我将其作为XML提供时没有错误,因此错误与模板本身无关,也与涉及的路由无关。这是在玩虫子吗!(我使用的是1.2.4) 这是请求/robots.txt时的错误消息: No route found No route able to invoke action PublicController.sitemap with arguments {} was found. ---------- In /app/views/PublicControll
No route found
No route able to invoke action PublicController.sitemap with arguments {} was found.
----------
In /app/views/PublicController/robots.txt (around line 1)
> 1: Sitemap: @@{PublicController.sitemap()}
This exception has been logged with id 69kj6fdbk
Sitemap: @@{PublicController.sitemap()}
这是robots.txt的模板:
No route found
No route able to invoke action PublicController.sitemap with arguments {} was found.
----------
In /app/views/PublicController/robots.txt (around line 1)
> 1: Sitemap: @@{PublicController.sitemap()}
This exception has been logged with id 69kj6fdbk
Sitemap: @@{PublicController.sitemap()}
这是关联的路由:
GET /robots.txt PublicController.robots(format:'txt')
GET /sitemap.xml PublicController.sitemap(format:'xml')
编辑:
好吧,这似乎是一个游戏中的错误!我在ActionDefinition Router.reverse(字符串,映射)
第461行中找到了以下内容:
if (!(Http.Request.current() == null ? "" : Http.Request.current().format).equals(route.staticArgs.get("format"))) {
allRequiredArgsAreHere = false;
break;
}
continue;
当中断
导致noroutefundexception
时。我不明白为什么在反向路由期间必须检查请求格式。反向路由用于生成链接,而不是响应或任何类似的内容。这可能会对重定向产生副作用,因为Controller.redirect(字符串、布尔值、对象…
使用reverse
并可能依赖于此行为(HTTP重定向是否允许内容类型或格式?)。不管怎样,这是主要的剧本!测试通过了我的游戏叉
我提交了一份错误报告。检查错误消息,它说:
No route able to invoke action PublicController.sitemap with arguments {}
这意味着在路由文件中,您缺少以下内容
GET /sitemap PublicController.sitemap()
您可能有一个带有PublicController.sitemap()
的条目,它接收一些参数,这将解释问题
更新时编辑:
如果您没有检查评论,正如Maenu在评论中提到的,问题是有不同的格式。Robots的内容类型为“text/plain”,站点地图为“text/xml”,两者不兼容
方法是从路由中删除格式,并尝试使用以下命令在控制器中进行设置:
renderText(...)
renderXml(...)
看 PublicController.sitemap()不接受任何参数。奇怪的是,如果我将所有“txt”都更改为“xml”,包括模板的文件扩展名,它就可以工作了(尽管当时模板不是有效的xml)。但是您的routes文件中声明了“PublicController.sitemap()”?是的(我更新了问题)。但现在观察到,这可能与路由中的格式的显式设置有关。因为当我把每一个“txt”改成“html”时,它也不起作用。所以我猜它只适用于“xml”,因为机器人和站点地图格式都是xml。因此,我现在认为这是路由器的问题,因为我看不出有任何理由不能工作。我还排除了“secure()”可能有问题的可能性,因为没有它,它的行为是相同的。