Pourquoi HttpRequest.HttpMethod est une chaîne au lieu d'Enum?
Dans le Référence de HttpRequest.HttpMethod
de .NET Framework, le type de la requête est déclarée avec System.String
type.
Dans La RFC 2616 tous requête HTTP méthodes sont déclarées (par exemple POST, GET, PUT, DELETE...).
Il y a aussi un comportement similaire dans les HttpWebRequest
et WebRequest
classes de .NET.
Java a l'approche similaire sur HttpURLConnection#setRequestMethod(String)
méthode.
Pourquoi ces langues, les concepteurs ne pas envisager la mise en œuvre d'un enum pour ceux HTTP méthodes?
Avez-vous une idée?
Vous devez vous connecter pour publier un commentaire.
Les premières phrases de votre La RFC 2616 lien (italiques ajoutés):
C'est-à-dire, la méthode HTTP peut être n'importe quoi. Il y a "bien connu" ou de méthodes communes, sur le plan sémantique, qui sont bien compris (bon, d'accord, devrait être bien compris - je encore rencontrer des gens pas clairs sur GET/POST).
Mais toute demande peut mettre en œuvre d'autres méthodes. Heureusement, la sémantique de ces méthodes sera bien comprise entre le client et le serveur d'applications.
Pour ces raisons, une énumération en serait inapproprié, car il peut toujours y avoir "d'autres" valeurs " qui ne rentrait pas dans cette enum.
Plus de citations de la La RFC 2616:
et,
Mvc
espace de noms, ils semblent à l'appui de deux surcharges - on accepter une valeur à partir de cette énumération, l'autre l'acceptation d'une chaîne de caractères (ou un tableau de chaînes de caractères). C'est une façon différente de faire les choses, mais ils semblent encore nécessaires pour fournir une soupape d'échappement pour lorsque la méthode n'est pas couramment utilisés ensemble.La spécification autorise explicitement plus de méthodes pour être utilisé, et donc l'ensemble de toutes les méthodes ne peuvent pas être énumérés.
Que Damien mentionne, RFC2616 définit seulement le commune méthodes. HTTP, comme XML, est un protocole qui peut être étendu pour prendre en charge d'autres formats.
Par exemple, supposons que je voulais mettre en œuvre une méthode spéciale appelée "Chiffrer". Si le HTTP bibliothèque ont été les énumérations, il ne pourrait pas et susceptible de lever une exception. Bien sûr, le client aurait à connaître de cette demande spéciale, qui est pourquoi la plupart des extensions sont faites via les en-têtes plutôt que de commandes.
HTTP est un protocole extensible, mais peu de gens en fait ne l'étendre.
Considérer cet exemple simple:
Depuis la "méthode" n'est qu'un texte, et l'utilisateur peut mettre n'importe quoi, alors la HTTP gestionnaire doit être capable de les gérer, de les corriger?
EDIT:
Comme il s'avère, la spécification HTML 4, il permet seulement GET et POST, pour être valide, mais HTTP va au-delà.
si HTTP est Livré avec une nouvelle méthode, puis java et C# doit mettre à jour son protocole enum. Quand seront-ils à jour? Vont-ils sortir un patch? ou sera mis à jour dans la prochaine version? Donc, la définition d'un enum sur des valeurs qu'il ne contrôle n'est pas une sage décision.