2013-08-01 54 views
0

我知道可以通過URL傳遞數據,比如「example.com/thing?id=1234」,或者可以通過表單和「提交」按鈕傳遞數據,但這些方法都沒有將爲我工作。如何從負載上的客戶端獲取數據?

我需要得到一個相當大的xml字符串/文件。我需要解析它並在我甚至可以顯示我的頁面之前從它獲取數據。

如何在頁面加載時獲得此信息?客戶端是否必須發送一個http請求?或者將xml作爲字符串提交給隱藏表單?


編輯與背景資料:

我創建會出現在我的客戶的應用程序中的小部件,使用C#WebBrowser控件嵌入,而是將我的服務器上託管。 Web應用程序需要通過xml將一些數據(包括用於客戶端驗證的令牌)傳遞到我的窗口小部件,並且這需要在我的窗口小部件啓動時首先加載。

+0

您需要提供一種方法讓他們爲您提供xml文件。最常見的方法是隻有一個簡單的頁面,只有一個上傳文件輸入,然後只有在處理文件後纔會顯示常規頁面。 –

+0

@Queti,我無法爲此創建額外的頁面或字段;這需要在加載*時發生,因爲我沒有直接從用戶那裏獲得xml。它是由另一個頁面調用我的頁面生成的,所有這些都發生在後臺... – Kalina

+0

那麼涉及上載xml文件的用戶還是通過某個不涉及用戶直接輸入的進程完成的? –

回答

1

ASP.NET MVC 4與jQuery和AJAX職位的偉大工程。我利用這個優勢多次完成了這個目標。

的jQuery:

 $(document).ready(function() {    
      $.ajax({ 
       type: "POST", 
       url: "/{controller}/{action}/", 
       data: { clientToken: '{token}', foo: 'bar', 
       success: function (data, text) { 
         //APPEND YOUR PAGE WITH YOUR PARSED XML DATA 
         //NOTE: 'data' WILL CONTAIN YOUR RETURNED RESULT 
       } 
      }); 
     }); 

MVC控制器:

[HttpPost] 
    public JsonResult jqGetXML(string clientToken, string foo) 
    { 
     JsonResult jqResult = new JsonResult(); 

     //GET YOUR XML DATA AND DO YOUR WORK 
     jqResult.Data = //WHATEVER YOU WANT TO RETURN; 

     return jqResult; 
    } 

注:此示例返回JSON數據(更容易IMO工作),而不是XML。它還假定XML數據不是來自客戶端,而是存儲在服務器端。

編輯:這裏是jQuery的阿賈克斯文檔的鏈接, http://api.jquery.com/jQuery.ajax/

1

假設您使用的是ASP.NET,既然您說它是由另一個頁面生成的,那麼只需將該XML粘貼到Session狀態即可。

+1

是的,這個*工作*,但如果它的任何真正的大小像運營商表示這是一個非常糟糕的資源服務器端使用,並潛在地風險性能和穩定性。 –

0

示例解決方案:

後臺進程導入xml文件並對其進行解析。後臺進程知道它是針對客戶YYY並更新他們的信息以便知道xml文件已被處理。

訪問者轉到其中嵌入了小部件的客戶的Web應用程序。在小部件的標記中添加了客戶令牌。這可能是在JavaScript,Flash,iFrame等。

當小部件加載時,它會向您發送一個請求,然後檢查該文件是否爲提供的客戶(YYY)解析,如果有顯示頁面/小部件。

0

您將無法自動將文件從客戶端上傳到服務器 - 至少不能通過瀏覽器使用html/js/httprequests。瀏覽器根本不會允許這樣做。

想象一下,如果瀏覽器允許您在不知情的情況下從客戶端本地計算機上靜默上傳文件,那麼可能會產生安全隱患。

1

另一種方法,不知道它是否有助於您的情況。

如果您在兩個網站(即..... sitename.com)上共享二級域名,那麼共享數據的另一種可能方式是您可以讓它們在該第二級使用該令牌來聲明一個cookie並它的XML數據。然後你會得到這個cookie。

我只做了這個共享認證的細節,你至少需要共享機器密鑰來支持這個(假設.Net在這裏......)。

0

如果通過HTTP提供XML,則可以使用Liqn來解析數據。

Ex。

public partial class Sample : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     string url = "http://news.yahoo.com/rss/"; 
     var el = XElement.Load(url).Elements("channel"); 

     StringBuilder output = new StringBuilder(); 

     foreach (var c in el.Elements()) 
     { 
      switch (c.Name.LocalName.ToLower()) 
      { 
       case "title": 
        output.Append(c.Value); 
        output.Append("<br />"); 
        break; 
      } 
     } 

     this.Label1.Text = output.ToString(); 

    } 
} 
0

它不完全清楚應用程序是什麼,你有什麼樣的選擇,以及你有什麼樣的網絡服務器控制。

如果您是網絡服務器/應用程序的所有者,您的選擇範圍更廣。您可以首先使用HTTP POST或PUT(包括隨機令牌)將文件發送到Web服務器,然後在查詢字符串

中使用令牌GET使用相同標記或使用適用於第三方擁有的其他選項網站

如果您嘗試使用某個auth api,請詳細瞭解它。由於您正在託管網頁瀏覽器控件,因此您有足夠的選項來編寫腳本。包括加載任何形式,設置textarea或隱藏字段文本與您的XML,然後模擬提交按鈕單擊。然後你可以迴應任何重定向和html響應。

你也可以在頁面內注入javascript,並通過ajax請求將它發送到服務器。

這個選擇在很大程度上取決於交互模型。

如果您需要更好的建議,如果您提供了示例/簡化的url/url模式,表單內容以及從代碼/ api/sdk透視圖中預期的事件序列,這將非常有幫助。他們通常都很友善。

0

創建一個Web服務,你的C#應用​​程序可以張貼XML並響應取回HTML。將此HTML字符串加載到WebBrowser控件中,而不是將控件指向一個URL。