2014-02-11 4 views
0

Я пытаюсь использовать веб-интерфейс. Все, что я получил от моего клиента этот код:конвертировать VB.NET в jQuery

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
    Dim client = New Net.WebClient 
    client.Credentials = New Net.NetworkCredential(System.Configuration.ConfigurationManager.AppSettings("apiUsername"), _ 
                System.Configuration.ConfigurationManager.AppSettings("apiPassword"), _ 
                System.Configuration.ConfigurationManager.AppSettings("apiDomain")) 


    client.Headers(Net.HttpRequestHeader.ContentType) = "application/json" 
    Dim eventParam As New PlumbingLibrary.StreamGameParam With {.EnterpriseId = txtAuthorEID.Text, 
                   .HeaderText = TxtText.Text, 
                   .ImageUrl = txtURL.Text, 
                   .Title = txtPhotoURL.Text, 
                   .Description = txtAlbumURL.Text} 

    Dim stream As New IO.MemoryStream() 
    Dim serializer As New System.Runtime.Serialization.Json.DataContractJsonSerializer(GetType(PlumbingLibrary.StreamGameParam)) 
    serializer.WriteObject(stream, eventParam) 

    Dim data As Byte() = client.UploadData(PlubingAPI_URL, "POST", stream.ToArray()) 


    stream = New IO.MemoryStream(data) 
    serializer = New System.Runtime.Serialization.Json.DataContractJsonSerializer(GetType(PlumbingLibrary.Activity)) 
    Dim returnActivity = TryCast(serializer.ReadObject(stream), PlumbingLibrary.Activity) 

    End Sub 

Это часть рабочего настольного приложения VB, что я должен использовать в качестве примера. Проект, над которым я работаю, основан исключительно на Интернете. Все написано в javascript/jquery.

Я попытался это:

var username = "API-ID", 
    password = "API-PASS", 
    url = "API-URL"; 


function make_basic_auth(user, password) { 
    var tok = user + ':' + password; 
    var hash = Base64.encode(tok); 
    return "Basic " + hash; 
} 

var auth = make_basic_auth(username,password); 

$.support.cors = true; 

    $.ajax 
     ({ 
     type: "POST", 
     url: url, 
     contentType: "application/json; charset=utf-8", 
     async: false, 
     crossDomain: true, 
     data: JSON.stringify({EnterpriseId: "the.id", 
           HeaderText: " ", 
           ImageUrl: " ", 
           Title: " ", 
           Description: " " 
     }), 
     beforeSend : function(req) { 
      req.setRequestHeader('Authorization', auth); 
     }, 
     success: function(){ 
      console.log('Success'); 
      $("body").append("success"); 
     }, 
     error: function (xhr, err) { 
      console.log("ERROR"); 
      console.log(xhr.statusText); 
     } 
    }); 

Я также попытался все другие АЯКС + Корс вариации.

.: например

xhr = new XMLHttpRequest(); 
     xhr.open('POST', url, true); 

     console.log(xhr); 
     xhr.setRequestHeader('X-PINGOTHER', 'pingpong'); 
     xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
     xhr.setRequestHeader('Authorization', auth); 

, но я получаю 401 unautorized и Нет 'Access-Control-Allow-Origin' заголовок. Данные для входа в систему Я работаю с настольным приложением. Я также могу войти прямо через http-login в браузере в URL-адрес API.

Помогает ли кто-нибудь?

ответ

0

Это может немного запутаться в кросс-домене. Если вы получаете данные от клиента в формате JSON (и это выглядит, как вы делаете), попробуйте сказать сценарий JSONP вы получаете данные, добавив следующую строку в вашем запросе: DATATYPE: «JSONP»

$.ajax 
    ({ 
    type: "POST", 
    url: url, 
    contentType: "application/json; charset=utf-8", 
    async: false, 
    crossDomain: true, 
    dataType: "jsonp", 
    data: JSON.stringify({EnterpriseId: "the.id", 
          HeaderText: " ", 
          ImageUrl: " ", 
          Title: " ", 
          Description: " " 
    }), 
    beforeSend : function(req) { 
     req.setRequestHeader('Authorization', auth); 
    }, 
    success: function(){ 
     console.log('Success'); 
     $("body").append("success"); 
    }, 
    error: function (xhr, err) { 
     console.log("ERROR"); 
     console.log(xhr.statusText); 
    } 
}); 
+0

Я попробовал то, что вы заговорили. но я получаю заголовок 405 Метод не разрешен. Вот журнал Fiddler: [link] (https://dl.dropboxusercontent.com/u/21648471/Screenshot%202014-02-12%2009.11.42.png) –

+0

вот заголовки ответов: # 1 HTTP/1.1 401 Несанкционированное Content-Type: текст/html Сервер: Microsoft-IIS/7.5 WWW-Authenticate: согласование WWW-Authenticate: NTLM X-Powered-By: ASP.NET X-UA-Compatible: IE = край Дата: ср, 12 февраля 2014 15:10:07 GMT Контент-длина: 1293 Set-Cookie: BIGipServer *********. *******. ******* *** ком = 1017452298.47873.0000. expires = Wed, 12-Feb-2014 16:10:02 GMT; path =/ Прокси-поддержка: Аутентификация на основе сеанса –

+0

HTTP/1.1 401 Неавторизованный Content-Type: text/html; Charset = US-ASCII Сервер: Microsoft-HTTPAPI/2,0 WWW-Authenticate: согласование TlRMTVNTUAACAAAABgAGADgAAAAVgoni/9xgn2SE96IAAAAAAAAAAMYAxgA + AAAABgGxHQAAAA9EAEkAUgACAAYARABJAFIAAQASAFYAUgBUAFYAVwAyADQAOAA0AAQAKgBkAGkAcgAuAHMAdgBjAC4AYQBjAGMAZQBuAHQAdQByAGUALgBjAG8AbQADAD4AVgBSAFQAVgBXADIANAA4ADQALgBkAGkAcgAuAHMAdgBjAC4AYQBjAGMAZQBuAHQAdQByAGUALgBjAG8AbQAFACIAcwB2AGMALgBhAGMAYwBlAG4AdAB1AHIAZQAuAGMAbwBtAAcACAB + rj2EBCjPAQAAAAA = Дата: Ср, 12 февраля 2014 15:10:07 GMT Content-Length: 341 Proxy- Поддержка: Аутентификация на основе сеанса –

Смежные вопросы