2009-05-26 7 views
13

Próbuję wysłać dużą porcję danych do obsługi HTTP. Nie mogę wysłać go za pomocą GET z powodu ograniczenia długości adresu URL, więc postanowiłem zamiast tego POST. Problem polega na tym, że nie mogę uzyskać wartości. context.Request.Form pokazuje, że zawiera 0 elementów. Czy istnieje sposób, że mogę POST danych do HttpHandler?Jak POST danych do ASP.NET HttpHandler?

+0

Co używasz do wniosku? HttpWebRequest? –

+0

Wywołuję połączenie Ajax za pomocą Jquery –

+0

Czy możesz podać próbkę kodu, co robisz po stronie żądania? – Deeksy

Odpowiedz

1

Dane POST wysyłane do modułu obsługi HTTP muszą mieć format wieloetapowy: a=b&c=d. Możesz go odzyskać po stronie serwera, używając Request["a"] (zwróci b) i tak dalej.

+0

Przepraszamy, ale go nie dostaję. POSTed, jeśli wyślę to w Querystringu: S. Czy możesz wyjaśnić nieco więcej, co sugerujesz? Jeśli mówisz, że powinieneś utworzyć zapytanie i dołączyć do mojego adresu URL, to nie byłoby to możliwe z powodu ograniczenia długości adresu URL –

+0

Myślę, że on oznacza kodowanie adresu URL danych, rozdzielanych znakami ampersand (&), podobnie jak w ciągu zapytania, z wyjątkiem treści żądania, a nie adresu URL. JQuery powinna obsługiwać to automatycznie. –

11

Posiadanie kodu do rozpoznania pomoże w zdiagnozowaniu problemu. Próbowałeś czegoś takiego? Kod

jQuery:

$.post('test.ashx', 
     {key1: 'value1', key2: 'value2'}, 
     function(){alert('Complete!');}); 

Następnie w metodzie ProcessRequest(), powinieneś być w stanie to zrobić:

string key1 = context.Request.Form["key1"]; 

Można również sprawdzić typ żądania w ProcessRequest() metody do debugowania kwestia.

if(context.Request.RequestType == "POST") 
{ 
    // Request should have been sent successfully 
} 
else 
{ 
    // Request was sent incorrectly somehow 
} 
2

miałem ten sam problem, w końcu zorientowali się, że ustawienie typu treści jako „json” była kwestia ...

contentType: "application/json; charset=utf-8" 

To linię niektóre popularne samouczki proponujemy, aby dodać w wywołaniu $ ajax i działa dobrze z ASPX WebServices, ale z jakiegoś powodu nie działa dla HttpHandler używającego POST.

Trudno złapać, ponieważ wartości w łańcuchu zapytania działają dobrze (inna technika widziana w Internecie, ale nie ma sensu używać do tego POST).

2

Też miałem ten sam problem. To był problem klienta/AJAX. Musiałem ustawić nagłówek żądania połączenia AJAX "ContentType" na

application/x-www-form-urlencoded 

, aby działało.

1

Podobny problem. Po naprawieniu wszystkich problemów, jeszcze jedna rzecz, którą przegapiłem w web.config - aby zmienić czasownik na * OR GET,POST. Potem wszystko działało dobrze.

<httpHandlers> 
    ... 
    <add verb="*" path="test.ashx" type="Handlers.TestHandler"/> 
</httpHandlers> 
1

pola POST są zawarte w

HttpContext.Request.Params 

Aby je odzyskać można użyć

var field = HttpContext.Request.Params["fieldName"];