Chcę wykonać wywołanie ajax z jQuery do mojego serwera. Zasadniczo chcę, aby żądanie zostało wysłane jako POST z typem treści x-www-form-urlencoded i odpowiednimi parametrami (parameter1=X¶mter2=Y¶meter3=Z). Chcę, aby odpowiedź była w formacie JSON.

Środowisko serwera to .NET. Eksperymentowałem z trzema poniższymi metodami, ale nie byłem w stanie sprawić, by jedna działała poprawnie.

ASPX — używając aspx do przetwarzania i zwracania JSON, mogę go uruchomić, ale muszę sam serializować JSON. Jest to możliwe, ale liczyłem na coś wygodniejszego. Popraw mnie także, jeśli się mylę, ale wyobrażam sobie, że strony aspx mają dużo dodatkowego obciążenia, ponieważ oczekuje się od nich więcej niż tylko wykonania metody i zwrócenia prostego JSON.

ASMX i WCF — dzięki asmx i WCF mogę zmusić go do zwrócenia JSON, ale tylko wtedy, gdy wyślę JSON w żądaniu.

Jaka jest najlepsza „struktura” po stronie serwera do zastosowania w przypadku tego typu żądania/odpowiedzi? aspx, asmx lub WCF? Skoro udało mi się przynajmniej zmusić aspx do pracy, czy jest to w ogóle odpowiednie podejście?

Widziałem inne produkty, które udostępniają interfejs API za pośrednictwem usługi sieciowej i używają formatu żądania nazwy / wartości z typem odpowiedzi JSON, ale wydaje się to być trudne do wykonania w .NET.

3
DCNYAM 5 sierpień 2011, 20:29

3 odpowiedzi

Najlepsza odpowiedź

Masz rację, że strony ASPX przynoszą dodatkowe obciążenie. Nawet jeśli w ogóle nie używasz struktury WebForms, żądania do stron ASPX nadal muszą filtrować przez cały cykl życia strony.

Jeśli wolisz tego rodzaju podejście niskopoziomowe, odczytywanie parametrów QueryString i odpowiadanie za pomocą ręcznie serializowanego JSON, ASHX HttpHandler byłby prawdopodobnie najlepszym rozwiązaniem.

Osobiście wolę usługi ASMX. Wysyłanie parametrów JSON nie jest bardzo trudne (i prawdopodobnie i tak zrobisz to, gdy zaczniesz wysyłać zagnieżdżone obiekty lub kolekcje, co jest bałaganem za pomocą prostych par klucz/wartość) i fajnie jest uniknąć niepotrzebnej ceremonii deserializacji i serializacji podczas każdego żądania.

Ludzie powiedzą, że WCF jest poprawnym rozwiązaniem, ponieważ jest nowszy, ale WCF .NET 4 nie jest obecnie doskonałym rozwiązaniem, gdy używasz jQuery. Nie jest tak elastyczny w przypadku typów DateTime i Enum i ma nieporęczną serializację słownika. Nowe WCF Web Api rozwiązuje te problemy, jeśli chcesz spróbować czegoś przed zakrętem.

1
Dave Ward 5 sierpień 2011, 20:44

Użyłem.

  • .aspx -> dokładnie tak, jak to robisz
  • .ashx -> podobny do .aspx, z wyjątkiem mniejszego obciążenia w cyklu życia strony.
  • .asmx & wcf -> co jest nie tak z przekazywaniem JSON w żądaniu?
  • MVC -> zwróć JsonResult. Ten jest moim ulubionym, gdy nie tworzę całego interfejsu API (w tym celu używam WCF), ale zamiast tego potrzebuję tylko jednego lub dwóch żądań, aby zwrócić JSON. To oczywiście zakłada, że ​​cała witryna jest napisana przy użyciu MVC, w przeciwnym razie zainstalowanie frameworka dla zaledwie kilku wywołań byłoby przesadą.
1
Al W 5 sierpień 2011, 20:46

Jeśli wszystko w porządku, korzystając z trasy WCF, sugeruję zapoznanie się z projektem WCF WebAPI firmy Microsoft. Ten projekt znajduje się na szczycie WCF i zapewnia pewne subtelności i uproszczenia, jeśli chodzi o dostęp klienta (kod .NET lub jQuery Ajax). Oto przewodnik za pomocą jQuery do POST-u zakodowanych danych. Istnieją również inne instrukcje pokazujące inne powiązane zadania.

Te usługi mogą być hostowane jak każda inna usługa WCF, a nawet hostowane bezpośrednio w tym samym projekcie ASP.NET, co reszta witryny.

W tej chwili projekt jest na wczesnym etapie rozwoju i ma pewne ograniczenia "Go-Live", ale w zależności od potrzeb projektu, może to zadziałać świetnie, tak dla nas.

0
ckittel 5 sierpień 2011, 20:42