gpt4 book ai didi

f# - 保护多个参数化页面

转载 作者:行者123 更新时间:2023-12-01 04:05:52 25 4
gpt4 key购买 nike

示例站点项目模板显示了如何保护单个非参数化页面。我搜索了一下,仔细阅读了 WebSharper 的网站等,但不知道如何保护多个参数化页面。有人可以向我展示或指出如何执行此操作的示例吗?

最佳答案

这个问题最近出现在 FPish再一次。似乎有一个不需要大量重构的简单解决方案。它需要一个辅助功能:

module Sitelet =

let Filter (ok: 'T -> bool) (sitelet: Sitelet<'T>) =
let route req =
match sitelet.Router.Route(req) with
| Some x when ok x -> Some x
| _ -> None
let link action =
if ok action then
sitelet.Router.Link(action)
else None
{ sitelet with Router = Router.New route link }

假设您有一个包含多个案例的 Action 类型,其中一些您想要保护,一些是公共(public)的:
type Action =
| Pub ..
| Priv ..

过滤允许您使用方便的 Infer完整类型上的组合器,然后安全地总结 protected 和公共(public)部分。由于总和站点是从左到右尝试的,因此保护仅适用于需要的地方:
let s1 =
Sitelet.Infer ..
|> Sitelet.Protect
|> Sitelet.Filter (function Priv _ -> true | _ -> false)
let s2 = Sitelet.Infer ..
Sitelet.Sum [s1; s2]

如果不进行过滤, protected 站点将捕获所有请求。可能还有其他解决方案,包括重构和拆分您的 Action键入几个子类型,或不使用 Infer 手动编写站点.

关于f# - 保护多个参数化页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9425571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com