2012-01-19 2 views
0

В настоящее время я работаю с универсальным обработчиком asp.net. Я считаю, что в настоящее время он находится в каком-то «слушающем» состоянии, ожидающем POST. Я ожидаю POST с заголовком заголовка файла, и после получения обработчика будет рассмотрен вопрос о загрузке файла. Мой код обработчика приведен ниже:HTTP сообщение To Self To Test Handler

Sub ProcessRequest(Byval context as HttpContext) Implements IHttpHanlder.ProcessRequest 

If context.Request.HttpMethod() = "POST" Then 
Dim Reader as New StreamReader(context.Request.InputStream) 
Dim contents as String = reader.ReadtoEnd() 

Dim filename as String = context.Request.Headers(("filename")) 
System.IO.File.Writealltext(ConfigurationManager.AppSettings("outputdirectory"), contents) 
Else 
context.Response.ContentType = "text/plain" 
context.Response.ContentType("Handler is alive") 
End If 

End Sub 

Я хотел бы повторить публикацию и посмотреть, успешно ли она прошла. Можно ли создать и отправить этот пост из другой программы на моей машине. Я попытался несколько учебников включая этот один

SO - POST Tutorial

Я чувствую, что я получил ближайший используя этот код (от предыдущей ссылки)

Using wc as New System.Net.WebClient 
wc.UploadFile("http://localhost:Port/local/of/handler", "C:\local\of\file.txt") 
End Using 

Я получаю ошибку 500 с пульта дистанционного управления сервер. Будет ли это проблемой с кодом обработчиков? Или я просто не делаю правильный тип POST?

Когда вы возитесь с wc.Headers()/предложением Дарина, я все еще получаю ошибку 500. Исключение составляет ниже.

System.Net.WebException: The remote server returned an error: (500) Internal Server Error 
at System.Net.HttpWebRequest.GetResponse() 
at System.Net.Webclient.GetWebResponse(WebRequest request) 
at System.Net.WebClient.WebClientWriteStream.Dispose(Boolean disposing) 
at System.IO.Stream.Close() 
at System.IO.Stream.Dispose() 
at TestPOSTGETEXE.Form1.Button4_Click(Object sender, EventArgs e) in C:\blah\blah\..\..\..\ 
+0

Ваш клиентский код даже не пытается установить заголовок, который ожидает ваш код обработчика. –

+0

Я отредактировал, я перепутал с такими вещами, как wc.Headers.Add, но can not, похоже, получил это прямо – sealz

+0

«messing around» не так полезен, как фактический код. –

ответ

1

Попробуйте так:

Using wc As New System.Net.WebClient 
    wc.Headers("filename") = "file.txt" 
    Using writer = wc.OpenWrite("http://localhost:Port/local/of/handler") 
     Dim file = System.IO.File.ReadAllBytes("C:\local\of\file.txt") 
     writer.Write(file, 0, file.Length) 
    End Using 
End Using 
+0

Я все еще получаю ошибку 500, которую я отредактирую с полным исключением – sealz

+0

@ harper89, какое исключение вы получаете внутри обработчика при его отладке ? Кажется, что есть некоторые проблемы, когда вы пытаетесь записать содержимое файла WriteAllText - уверены ли вы, что путь правильный, и что у учетной записи достаточно привилегий для записи в эту папку? Кроме того, в вашем обработчике вы, кажется, не используете заголовок файла, вы используете некоторый 'ConfigurationManager.AppSettings (« outputdirectory »)', который больше походит на имя каталога, а не на имя файла, поэтому это может быть причиной того, почему ваш общий обработчик сбои. Вы должны, вероятно, «Path.Combine» это значение с переменной 'filename'. –

+0

Вернулась, чтобы сделать обновление, но похоже, что вы поняли это в первую очередь. При отладке обработчика кажется, что я не могу попасть в какой-либо каталог. Каждое место выбрасывает «UnauthorizedAccessException» Доступ к пути «C: \ dir \ to \ put \ stuff» отклоняется – sealz