Playframework 在.txt播放中出错!模板,用作.xml

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

我在一个简单的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/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()”可能有问题的可能性,因为没有它,它的行为是相同的。