2014-12-08 6 views
0

Я пытаюсь отправить запрос HttpPost с Android на C# (.net 3.5) aspx server. Я использую Apache многочастного объект строитель строит объект на Android стороны:Как получить данные о множественном запросе в 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

Пожалуйста, пост решение в качестве ответа. –

+0

Должен ли я ожидать ответа на свой вопрос в stackoverflow? Моя репутация потеряла 2 балла после ответа на мой собственный вопрос ... – TRX

ответ

0

решение:

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

Вы проверяете переменные Form, где ваш код создает blob, который отправляется внутри тела запроса HTTP. Тело не является переменной формы, это просто содержимое внутри HTTP-запроса, которое появляется после заголовков.

HttpRequest понимает содержание запроса HTTP и предоставляет различные части через его свойства, например Cookies, Files, Form, Headers.

Если ваш код отправляет двоичные данные в виде файла, проверьте свойство 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;' и протестировал его в своем коде, но когда я пытаюсь получить доступ к этой странице из браузера, я просто получил аргумент «Argument Out Of Range Exception» в 'aFile.InputStream.Read (input , 0, length), 'line. Я что-то упускаю? Заранее спасибо. – TRX

+0

Какова ценность длины? Сколько файлов есть? Каковы их имена и длины? Кого вы пытались прочесть? Можете ли вы опубликовать образец запроса HTTP? Просто тот факт, что вы можете получить первый файл с 'files [0]', означает, что запрос содержит * как минимум * один файл. –

+0

Извините за поздний ответ. Наконец я решил это. Решение прост, я обновил исходный вопрос с помощью решения. Еще раз спасибо! – TRX

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