2016-06-30 1 views
4

が含まれていることを確認するための最も簡単な方法は何ですか:着信要求は、私は形でシンプルSuave.ioサーバーを使用している特定のヘッダ値

let Ok o = o |> JsonConvert.SerializeObject |> Successful.OK 
let NotOk o = o |> JsonConvert.SerializeObject |> RequestErrors.BAD_REQUEST 

type Result<'T> = 
| Success of 'T 
| Failure of string 

let DoThing someParam anotherParam = 
    let stats = Success(999) // <- business code here 
    match stats with 
    | Success s -> s |> Ok 
    | Failure m -> m |> NotOk 
... 
     let app = 
      choose 
       [ GET >=> choose 
        [ 
         pathScan "/someroute/%i/%i" (fun (p1, p2) -> 
           DoThing p1 p2) 
        ] 
       ] 
     startWebServer config app 
     0 

私は要求が持つヘッダが含まれていることを確認したいと思います特定の名前と値を返し、NotOkが不在か間違っているときにNotOkを返します。これを達成する最も簡単な方法は何ですか?

私はSuave.ioの作曲スタイルの新人です。

+0

をご覧ください。http://stackoverflow.com/questions/31672110/suave-io-using-pathscan-and-request-togetherあなたはその要求を調べることができると思う。注: '型WebPart = HttpContext - >非同期'とタイプHttpContext = {要求:HttpRequest;レスポンス:HttpResponse} 'したがって、 'WebPart'をアンラップする必要があります。 – halcwb

答えて

3

私は、これは何が必要だろうと思います:

#r "Newtonsoft.Json.dll" 
#r "Suave.dll" 
#r "Suave.Testing.dll" 
#r "System.Net.Http.dll" 
#r "Fuchu.dll" 

open System.Net 
open System.Net.Http 

open Suave 
open Suave.Operators 
open Newtonsoft.Json 
open Suave.Filters 
open Suave.Testing 

let Ok o = o |> JsonConvert.SerializeObject |> Successful.OK 
let NotOk o = o |> JsonConvert.SerializeObject |> RequestErrors.BAD_REQUEST 

type Result<'T> = 
| Success of 'T 
| Failure of string 

let DoThing someParam anotherParam = 
    let stats = Success(999) // <- business code here 
    match stats with 
    | Success s -> s |> Ok 
    | Failure m -> m |> NotOk 

let checkHeader ctx = 
    asyncOption { 
     match "key" |> ctx.request.header with 
     | Choice1Of2 k1 -> 
      printfn "Header k1: %s" k1 
      return ctx 
     | Choice2Of2 k2 -> 
      printfn "Header k2: %s" k2 
      return { ctx with 
         response = { ctx.response with 
             status = HTTP_400 } } } 

let app = 
    choose 
     [ GET >=> choose 
      [ 
       pathScan "/someroute/%i/%i" (fun (p1, p2) -> 
         DoThing p1 p2) 
       >=> checkHeader 
      ] 
     ] 

let emptyCont = new ByteArrayContent([||]) |> Some 

runWith defaultConfig app 
|> reqResp HttpMethod.GET 
      "/someroute/1/2" "" 
      None 
      None 
      DecompressionMethods.None 
      id 
      id 

は、このスクリプトと同じディレクトリに必要なLIBSを持っていて、それを実行できることを確認してください。 keyヘッダーがないため、結果は内容999のBAD_REQUESTとなります。

checkHeaderはトリックを行います。

+0

ありがとうございました! – Kit

関連する問題