извините, это такой длинный пост
Я использую F# и WebSharper (я новичок в обеих технологиях)
У меня определены некоторые конечные точки (у меня есть рабочий код, пока я не добавлю конечную точку NotFound)
type EndPoint =
| [<EndPoint "/">] Home
| [<EndPoint "/login">] Login
| [<EndPoint "/about">] About
| [<EndPoint "/logout">] Logout
// trying to make a catch-all page handler
| [<EndPoint "/"; Wildcard>] NotFound of string
...
let HomePage ctx =
Templating.Main ctx EndPoint.Home "Home" [
// page stuff
]
let LoginPage ctx =
Templating.Main ctx EndPoint.Login "Login" [
h1 [] [text "Login Here"]
div [] [client <@ Client.LoginWidget() @>]
]
// other page constructs
let MissingPage ctx path =
Templating.Main ctx EndPoint.About "Page Not Found" [
h1 [] [text "404"]
p [] [text "The requested page could not be found"]
p [] [text path]
]
...
[<Website>]
let Main =
Application.MultiPage (fun ctx endpoint ->
match endpoint with
| EndPoint.Home -> HomePage ctx
| EndPoint.About -> AboutPage ctx
| EndPoint.Login -> LoginPage ctx
| EndPoint.Logout ->
async {
// call server-side code to log the user out
// what would i do here to redirect the user to the /login
// page
}
| EndPoint.NotFound path -> MissingPage ctx path
)
Добавление конечной точки NotFound приводит к беспорядку на других моих страницах, например, моя домашняя страница начинает обрабатываться обработчиком MissingPage. что я могу понять, поскольку домашняя страница настроена на соответствие «/», а шаблон not соответствует подстановочному знаку «/», хотя я ожидал, что одиночный / будет соответствовать конечной точке Home и чему-либо еще, кроме /Login /About и /Выйдите из системы, чтобы соответствовать ветке NotFound. Но явно, я что-то не правильно понимаю.
Итак, как я могу получить конечную точку типа «универсальный», чтобы я мог правильно обрабатывать любой путь, который явно не обслуживается
другая вещь, которая портится, когда у меня был код обработки NotFound, - это то, что обработчик входа больше не обрабатывает
div [] [client <@ Client.LoginWidget() @>]
И, наконец, в обработчике выхода я хочу вызвать какой-то серверный код (нет проблем), но что мне делать, чтобы затем перенаправить на новую веб-страницу, например, чтобы отправить пользователя обратно на страницу /login?
Еще раз извините за такой длинный пост, Дерек.