定义与磁盘上的文件匹配的路由

时间:2015-03-07 21:55:06

标签: f# nancy

我正试图通过将它们包装在模板中来装饰公共目录中的一些文件。

示例文件系统结构:

project_root\
    file_i_want_to_decorate.html
    file_that_should_be_just_downloadable.zip

路由/{path*}只捕获所有文件。不好。

所以我的想法是使用自定义匹配器:

type ContentRouteSegmentConstraint() =
    inherit RouteSegmentConstraintBase<string>()
    let root = Environment.GetEnvironmentVariable("PROJECT_ROOT")        
    override x.Name with get() = "content"
    override x.TryMatch(``constraint``, segment, matchedValue) =
        matchedValue <- segment
        File.Exist(segment)

添加路线/{path*:content}。嗯,它的工作原理,但只有第一个段传递给函数。即使使用/index调用它,动态字典中的参数"path"也是空的。

1 个答案:

答案 0 :(得分:0)

这是不正确的方法。路段过滤功能应该按如下方式使用,而不是匹配段的功能:

Get["/{path*}", (fun (context) -> context.Request.Url.Path |> content.CanServe)] <- fun ...