2014-12-08 100 views
0

我想從Android發送HttpPost請求到C#(.net 3.5)aspx服務器。我使用Apache的多實體生成器生成的安卓端實體:如何在aspx中獲取多部分請求數據?

entityBuilder.addTextBody("username", username); 
entityBuilder.addTextBody("password", password); 
entityBuilder.addBinaryBody("file", file); 

並嘗試在C#服務器端獲取數據:

protected void Page_Load(object sender, EventArgs e) 
{ 
    string[] keys = Request.Form.AllKeys; // only username and password keys received. 

    for (int i = 0; i < keys.Length; i++) 
    { 
     string [] tmp = Request.Form.GetValues (keys[i]); 
    } 
} 

我可以在申請的TextBody部分鍵和值(用戶名和密碼)。但沒有收到BinaryBody密鑰或數據。我不知道爲什麼?

+0

請後的溶液,作爲一個答案。 – 2014-12-19 15:40:03

+0

我應該預計在stackoverflow中回答我自己的問題嗎?我的聲譽在回答我自己的問題後丟了2分... – TRX 2014-12-24 02:52:23

回答

0

解決方案:

HttpFileCollection MyFiles = Request.Files; 
// ... 
for (int l = 0; l < MyFiles.Count; l++) 
{ 
    if (MyFiles.GetKey(l) == "file") 
    { 
     HttpPostedFile file = MyFiles.Get("file"); 
     // ... 
    } 
} 
2

您正在檢查表格變量,其中您的代碼創建了一個在HTTP請求正文內發送的blob。正文不是一個表單變量,它只是頭後的HTTP請求中的內容。

的HttpRequest理解的HTTP請求的內容,並通過它的屬性暴露的各個部分,例如CookiesFilesFormHeaders

如果您的代碼將二進制數據作爲文件發送,請檢查Files屬性。否則,您可以使用屬性讀取正文的內容。

假設數據在文件中找到的HttpPostedFile.InputStream文檔介紹瞭如何讀取文件:

var files=Request.Files; 
var aFile=files[0]; 

var length = aFile.ContentLength; 
byte[] input = new byte[length]; 

aFile.InputStream.Read(input,0,length); 

InputStream只是一個流,因此您可以在一個緩衝區拷貝它的內容,寫出來磁盤等

+0

是'var files Request.Files;'一個錯字?我將它更改爲'var files = Request.Files;'並在我的代碼中測試它,但是當我嘗試從瀏覽器訪問頁面時,我剛剛在'aFile.InputStream.Read(input ,0,長度);'線。我錯過了什麼嗎?提前致謝。 – TRX 2014-12-09 01:58:10

+0

長度的值是多少?那裏有多少個文件?他們的名字和長度是什麼?你嘗試閱讀哪一個?你能發佈HTTP請求的樣本嗎?只要事實上你可以用'files [0]獲得第一個文件'意味着請求包含*至少一個文件。 – 2014-12-09 08:07:52

+0

對不起,延遲迴復。最後我解決了它。解決方案很簡單,我用解決方案更新了原始問題。再次感謝! – TRX 2014-12-19 15:13:57

相關問題