2015-11-10 47 views
0

我們有兩個位於Intranet上的Web服務器。服務器A是我的,服務器B正在運行Tableau。RAZOR如何調用服務器端url POST

我基本上要做到這一點:

var myTicket = what you would get if this ran AS the server: 

        var tableau_params = { username: 'DistrictDataReader'}; 
        $.ajax({ 
         type: "POST", 
         url: "http://Dataviz:8080/trusted", 
         data: tableau_params, 
         success: function (msg) { I want to set my myTicket to equal what comes back form server B} 
        }); 

我嘗試了一堆東西,把AJAX調用JavaScript內 - 但我敢肯定,這確實不是從網絡服務器上運行 - 而是,客戶端。我嘗試了兩種Ajax調用,都給我CORS錯誤。

<script> 
     $(function() { 
      $("#Result").click(function() { 
       var tableau_params = { username: 'DistrictDataReader'}; 
       var ticket; 
       $.ajax({ 
        type: "POST", 
        url: "http://Dataviz:8080/trusted", 
        data: tableau_params, 

        // First format attempt 
        dataType: "html", 
        success: function (msg) { 
         ticket = $('#Result').html(msg.d); 
        } 

        // Second format attempt 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        success: function (msg) { 
         ticket = $('#Result').text(msg.d); 
        } 

       }); 

       alert(ticket); 
      }); 
     }); 
    </script> 

我也試過在服務器B對外開放CORS允許通過任何東西,但考慮到雙方的上述迴歸原點錯誤的例子,我敢肯定這是真的不運行形成我的網絡服務器。

所以我想另一種方式來做到這一點。我真的只是想設置我的變量myTicket從POST到http://dataviz:8080/trusted與參數設置{username:'DistrictDataReader'}

我該怎麼做?

我在RAZOR的單個cshtml頁面上。

+0

一個附加的基本問題。您正在進行異步Ajax調用,該調用稍後會返回值,但會立即嘗試提醒返回的值。 「這就像是點了一份比薩餅,然後在它交付之前嘗試吃掉它:)」 –

回答

0

如果它仍然不允許交叉來源,那麼你的CORS設置是不正確的。儘管如此,你還沒有提供任何信息。

另一種選擇是使用JSONP,假設外部站點支持它或可以支持它。這完全繞開了對CORS的需求。

+0

好吧,CORS真的很不錯 - 它設置正確(關於這個問題的其他文章) - 但電話並不是服務器。 – user3795152

+0

我真的很想知道RAZOR中是否有一種方法來設置變量,如下所示:var MyTicket =將POST的結果發送到http:_____用戶名='someaccountname' – user3795152

+0

不,不是這樣。我的意思是,鑑於Razor可以運行C#代碼,你可以創建一個'HttpClient',請求它,解析結果,然後用該結果設置一個變量。但是,這樣的事情應該在視圖之外完成。 –

0

想通了:

這是如何在不AJAX做到:(?)

@{ 


    string postData = "username=DistrictDataReader"; 
    byte[] data = System.Text.Encoding.ASCII.GetBytes(postData); 
    var myTicket = ""; 

     try 
     { 

      HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://dataviz:8080/trusted"); 

      req.Method = "POST"; 
      req.ContentType = "application/x-www-form-urlencoded"; 
      req.ContentLength = postData.Length; 

      // Write the request 
      Stream outStream = req.GetRequestStream(); 
      outStream.Write(data, 0, data.Length); 
      outStream.Close(); 

      // Do the request to get the response 
      HttpWebResponse res = (HttpWebResponse)req.GetResponse(); 
      StreamReader inStream = new StreamReader(res.GetResponseStream()); 
      string resString = inStream.ReadToEnd(); 
      inStream.Close(); 

      myTicket = resString; 
     } 
     catch {myTicket = "Ooops!";} 

     Response.Redirect("http://dataviz:8080/trusted/"+ myTicket +"/views/SBACStateandCounty/VermontMap"); 
}