Chciałbym lepiej zrozumieć, w jaki sposób metoda kontrolera wie, kiedy parametr, który otrzyma, powinien zostać pobrany z danych pocztowych lub adresu URL.ASP.NET MVC: W jaki sposób kontroler rozróżnia parametry w adresie URL i wysyła POST
Weźmy następujący przykład:
URL: /ModelController/Method/itemID
// Where itemID is the id (int) of the item in the database
POST: objectOrArray: {JSON Object/Array}
Kontroler będzie wyglądać następująco:
[HttpPost]
public ActionResult InputResources(int? id, Object objectOrArray)
Teraz jakoś metoda jest wystarczająco inteligentny, aby spojrzeć na pierwszym parametrze, id
, w adres URL strony i Object
w HTTPPost
.
Podczas gdy to działa, nie wiem dlaczego, w wyniku czego czasami wpadam w nieprzewidywalne i błędne zachowanie. Na przykład, znalazłem (chociaż nie jestem w 100% pewny), że usunięcie ?
z int? id
powoduje, że metoda kontrolera natychmiast zakłada, że powinna szukać id w HTTPPost
, a nie w adresie URL.
Więc chciałbym wyjaśnić następujące kwestie:
co dokładnie jest to, że mówi metodę gdzie szukać danych? (Atrybut [HttpPost]
wyklucza metodę?)
Czy obowiązują konwencje nazewnictwa? (na przykład usuń ?
lub nie używając id
jako nazwy zmiennej?)
Czy kolejność, w jakiej są umieszczane zmienne, ma wartość inpact? (tj. umieszczenie Object
przed) w przekonaniu, że mogę mniej lub bardziej rozgryźć niektóre z tych rzeczy metodą prób i błędów, ale chciałbym raczej wyjaśnienia kwalifikowanego, niż kontynuowania pracy opartej na obserwacji.
Dziękuję
Chopo
Dziękuję, świetna odpowiedź. Udostępniono również doskonałe źródło informacji – Chopo87