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?
Odpowiedz
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.
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 –
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. –
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
}
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).
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.
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>
pola POST są zawarte w
HttpContext.Request.Params
Aby je odzyskać można użyć
var field = HttpContext.Request.Params["fieldName"];
Co używasz do wniosku? HttpWebRequest? –
Wywołuję połączenie Ajax za pomocą Jquery –
Czy możesz podać próbkę kodu, co robisz po stronie żądania? – Deeksy