Отправка файлов cookie единого входа при выполнении ajax-вызова в websharper

Я создал сайт с помощью WebSharper и наткнулся на проблему. Я хочу интегрировать сайт с VSTS REST API. Чтобы сделать это (кажется, не нужно), мне нужно переслать сессионный cookie. Как мне это сделать в вызове WebSharper-Ajax. Моя текущая реализация вызова Ajax до того, как она мне понадобилась, выглядит следующим образом и прекрасно работает для других нужд, которые у меня были до сих пор.

let Ajax (request : Request) =
    let httpMethod = request.Method
    let url = request.EndPoint
    let data = request.AsJson

    let success ok =
        System.Action<obj,string,JqXHR>(
                 fun res _  _ -> 
                     let result = (res :?> string |> Json.Parse)                    
                     if JS.HasOwnProperty result "error" then
                          {
                             ErrorType = result?error
                              Reason = result?reason
                           } |> pushError
                     else
                         result 
                         |> Success 
                         |> ok
        )
    let contentType = Union<bool,string>.Union2Of2("application/json")
    try
        Async.FromContinuations
        <| fun (ok, ko, _) ->
            let settings = JQuery.AjaxSettings(
                            Url = url,
                            DataType = JQuery.DataType.Text,
                            Type = As<JQuery.RequestType> httpMethod,
                            Success = success ok,
                            ContentType = contentType,
                            Error = System.Action<JqXHR,string,string>(fun jqXHR  _  _ -> 
                                    let error = 
                                        jqXHR?responseText 
                                        |> Json.Parse
                                    {
                                       ErrorType = error?error 
                                       Reason = error?reason
                                    } |> pushError |> ok
                               )
                          )
            match data with
            Some data ->
                settings.Data <- data
            | None -> ()
                JQuery.Ajax(settings) |> ignore
    with e ->
        async { 
           return {
                    ErrorType ="uncaught exception"; 
                    Reason = e.Message
                  } |> Error 
        }

1 ответ

Оказывается, решение довольно простое. После создания объекта AjaxSetting просто используйте динамическую типизацию, чтобы добавить объект xhrFields

settings?xhrFields <- obj()
settings?xhrFields?withCredentials <- true
Другие вопросы по тегам