0

我在Simply Lift的第 3.2 节SiteMap中学习了 Lift 的基础知识,有一件事让我印象深刻。

使用默认代码,您可以通过三种SiteMap方式请求info查看:

  • GET /info,
  • GET /info.html,
  • GET /info.xml(为什么?)。

此外,您可以通过四种不同的方式请求index查看:

  • GET /,
  • GET /index,
  • GET /index.html,
  • GET /index.xml.

如何将此行为限制GET /为目录和GET /info文件?


PS所有这些返回200 OK

一个资源不应该只有一个 URL 吗?

4

2 回答 2

3

实际上可以解析的方式不止四种。可以在此处找到已知后缀的完整列表(其中任何一个都可用于访问该页面)。

我认为这样做的原因是 Lift 可用于服务任何资源,因此默认情况下大多数都是显式添加的。

我认为您可以通过将其添加到以下内容来禁用 Lift 对所有扩展的处理Boot.scala

LiftRules.explicitlyParsedSuffixes = Nil

但是,我不建议这样做,因为可能会有一些副作用。

使用ReqwithRestHelper可以显式指定后缀,但我不知道是否有这样的构造可以使用Sitemap.

于 2013-05-20T02:43:54.977 回答
2

实际上,确定 Lift 是否应该处理请求的代码在这里。您可以直接在上面的方法中看到默认扩展名liftHandled,但它们都可以用LiftRules.liftRequest. 就像是:

LiftRules.liftRequest append {
  case r => Full(r.path.suffix.trim == "")
}

应该做的伎俩。

至于为什么会这样工作,Jason 是对的,Lift 旨在处理多种类型的动态资源。

于 2013-05-20T14:53:12.317 回答