ApiController restituisce 404 quando l’ID contiene il periodo

Ho un ApiController e voglio usare gli indirizzi email come parametro ID per le richieste:

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

Tuttavia, non riesco a farlo funzionare (restituisce 404 ):

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

Quanto segue tutto funziona:

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

Ho impostato relaxedUrlToFileSystemMapping="true" nel mio web.config come dettagliato da Phil Haack .

Mi piacerebbe molto che l’indirizzo e-mail completo funzionasse, ma ogni volta che il periodo è seguito da qualsiasi altro carattere, la richiesta restituisce un 404. Qualsiasi aiuto sarebbe molto apprezzato!

Soluzione

A causa della mancanza di altre opzioni, mi sono diretto nella direzione suggerita da Maggie e ho usato la risposta di questa domanda per creare una regola di riscrittura per aggiungere automaticamente una barra finale quando ho bisogno di una email nell’URL.

  ....          

Aggiungerebbe una barra finale di lavoro per il tuo scenario?

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

Controlla le tue impostazioni di IIS:

Home Directory -> Configuration

Modifica l’estensione dell’applicazione .aspx e assicurati che l’impostazione Verify that file exists sia distriggersto.

AGGIORNARE

Ho appena testato con un progetto MVC4 Web API predefinito

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

Azione in ValuesController :

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

Questa è stata la risposta:

 cool@email.com