ApiController renvoie 404 lorsque l’ID contient une période

J’ai un ApiController et je veux utiliser les adresses e-mail comme paramètre d’ID pour les requêtes:

// GET api/employees/email@address.com public CompactEmployee Get(ssortingng id) { var email = id; return GetEmployeeByEmail(email); } 

Cependant, je ne peux pas faire fonctionner ceci (retourne 404 ):

http://localhost:1080/api/employees/employee@company.com

Tous les travaux suivants:

  • http://localhost:1080/api/employees/employee@company
  • http://localhost:1080/api/employees/employee@company.
  • http://localhost:1080/api/employees?id=employee@company.com

J’ai défini relaxedUrlToFileSystemMapping="true" dans mon web.config comme détaillé par Phil Haack .

J’aimerais beaucoup que l’adresse e-mail complète fonctionne, mais chaque fois que la période est suivie par un autre personnage, la demande renvoie un 404. Toute aide serait grandement appréciée!

Solution

En raison de l’absence d’autres options, je me suis dirigé dans la direction suggérée par Maggie et j’ai utilisé la réponse de cette question pour créer une règle de réécriture pour append automatiquement une barre oblique lorsque j’ai besoin d’un email dans l’URL.

  ....          

Est-ce que l’ajout d’une barre oblique droite convient à votre scénario?

 http://localhost:33021/api/employees/employee@company.com/ 

Vérifiez vos parameters IIS:

Home Directory -> Configuration

Modifiez l’extension de l’application .aspx et vérifiez que le paramètre Verify that file exists est désactivé.

METTRE À JOUR

Je viens de tester avec un projet d’API Web MVC4 par défaut

URL: http://localhost:10983/api/values/cool@email.com

Action dans ValuesController :

 public ssortingng Get(ssortingng id) { return id; } 

C’était la réponse:

 cool@email.com