J'ai un ApiController et je souhaite utiliser les adresses électroniques comme paramètre d'ID pour les demandes:
// GET api/employees/[email protected]
public CompactEmployee Get(string id) {
var email = id;
return GetEmployeeByEmail(email);
}
Cependant, je ne peux pas obtenir que cela fonctionne (renvoie 404):
http://localhost:1080/api/employees/[email protected]
Les suivants fonctionnent tous:
http://localhost:1080/api/employees/employee@company
http://localhost:1080/api/employees/employee@company.
http://localhost:1080/api/[email protected]
J'ai mis relaxedUrlToFileSystemMapping="true"
dans mon web.config comme détaillé par Phil Haack .
J'aimerais beaucoup que l'adresse e-mail complète me permette de travailler, mais chaque fois que la période est suivie par un autre caractère, la demande renvoie 404. Toute aide serait grandement appréciée!
Faute d’autres options, je me suis dirigée dans la direction suggérée par Maggie et a utilisé la réponse de cette question pour créer une règle de réécriture afin d’ajouter automatiquement une barre oblique de fin lorsque j’ai besoin d’un courrier électronique dans l’URL.
<system.webServer>
....
<rewrite>
<rules>
<rule name="Add trailing slash" stopProcessing="true">
<match url="^(api/employees/.*\.[a-z]{2,4})$" />
<action type="Rewrite" url="{R:1}/" />
</rule>
</rules>
</rewrite>
</system.webServer>
Est-ce que l'ajout d'une barre oblique de fin fonctionnerait pour votre scénario?
http://localhost:33021/api/employees/[email protected]/
Vérifiez vos paramètres IIS:
Home Directory -> Configuration
Modifiez l'extension d'application .aspx
et assurez-vous que le paramètre Verify that file exists
est désactivé.
METTRE &AGRAVE; JOUR
Je viens de tester avec un projet d'API Web MVC4 par défaut
URL: http://localhost:10983/api/values/[email protected]
Action dans ValuesController
:
public string Get(string id)
{
return id;
}
C'était la réponse:
<string xmlns="http://schemas.Microsoft.com/2003/10/Serialization/">[email protected]</string>
C'est ce qui a fonctionné pour moi:
Je courais sur targetFramework = 4.6.1. J'ai mis à jour à la version 4.6.2 et ajouté ceci dans web.config:
<system.web>
<customErrors mode="Off"/>
<compilation debug="true" targetFramework="4.6.2"/>
<!-- This will allow to search for stuff that contains . & etc.-->
<httpRuntime targetFramework="4.6.2" maxRequestLength="100000" maxUrlLength="2048" relaxedUrlToFileSystemMapping="true" requestPathInvalidCharacters=""/>
</system.web>
Le requestPathInvalidCharacters=""
doit pouvoir avoir des choses comme & etc dans l'URI, sous forme codée, bien sûr.