定义匹配磁盘文件的路由
Define route that matches file on disk
我试图通过将它们包装在模板中来装饰 public 目录中的一些文件。
示例文件系统结构:
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"
也是空的
这是不正确的做法。应该使用路由过滤函数代替段的匹配函数,如下所示:
Get["/{path*}", (fun (context) -> context.Request.Url.Path |> content.CanServe)] <- fun ...
我试图通过将它们包装在模板中来装饰 public 目录中的一些文件。
示例文件系统结构:
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"
也是空的
这是不正确的做法。应该使用路由过滤函数代替段的匹配函数,如下所示:
Get["/{path*}", (fun (context) -> context.Request.Url.Path |> content.CanServe)] <- fun ...