2014-02-11 73 views
0

我正在尝试使用基于Web的API。所有我从我的客户收到的是这样的代码:将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桌面应用程序的一部分。 我正在做的项目完全是基于Web的。全部用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); 
     } 
    }); 

我也尝试了其他所有的AJAX + CORS变化。

例如为:

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并没有“访问控制允许来源”标头。 我与桌面应用程序一起工作的登录信息。我也可以通过浏览器中的http登录直接登录API网址。

有没有人可以帮忙?

回答

0

它可以得到一个棘手的跨域。如果是从客户端JSON格式接收数据回(和它看起来像你这样做),试图通过加入这一行中你的要求告诉你的脚本您收到JSONP数据:数据类型:“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方法不允许。这里是提琴手日志:[链接](https://dl.dropboxusercontent.com/u/21648471/Screenshot%202014-02-12%2009.11.42.png) –

+0

这里是响应标头: #1 HTTP/1.1 401未经授权 的Content-Type:text/html的 服务器:Microsoft-IIS/7.5 WWW身份验证:协商 WWW验证:NTLM X供电,通过:ASP.NET X-UA兼容:IE =边缘 Date:Wed,12 Feb 2014 15:10:07 GMT Content-Length:1293 Set-Cookie:BIGipServer *********。*******。******* *** COM = 1017452298.47873.0000。到期=星期三,12-Feb-2014 16:10:02 GMT;路径=/ 代理支持:基于会话的身份验证 –

+0

HTTP/1.1 401未授权 Content-Type:text/html;字符集= US-ASCII 服务器:HTTPAPI/2.0 WWW身份验证:协商TlRMTVNTUAACAAAABgAGADgAAAAVgoni/9xgn2SE96IAAAAAAAAAAMYAxgA + AAAABgGxHQAAAA9EAEkAUgACAAYARABJAFIAAQASAFYAUgBUAFYAVwAyADQAOAA0AAQAKgBkAGkAcgAuAHMAdgBjAC4AYQBjAGMAZQBuAHQAdQByAGUALgBjAG8AbQADAD4AVgBSAFQAVgBXADIANAA4ADQALgBkAGkAcgAuAHMAdgBjAC4AYQBjAGMAZQBuAHQAdQByAGUALgBjAG8AbQAFACIAcwB2AGMALgBhAGMAYwBlAG4AdAB1AHIAZQAuAGMAbwBtAAcACAB + rj2EBCjPAQAAAAA = 日期:星期三,2014年2月12日15:10:07 GMT 的Content-Length:341 的Proxy-支持:基于会话的认证 –