Tengo una ApiController y quiero utilizar direcciones de correo electrónico como IDENTIFICADOR de parámetro para las solicitudes:

//GET api/employees/[email protected]
public CompactEmployee Get(string id) {
   var email = id;
   return GetEmployeeByEmail(email);
}

Sin embargo, no puedo conseguir que esto funcione (devuelve 404):

http://localhost:1080/api/employees/[email protected]

Los siguientes trabajos:

He puesto relaxedUrlToFileSystemMapping="true" en mi web.config como detallado por Phil Haack.

Me gustaría mucho amor a la dirección de correo electrónico completa para trabajar, pero en cualquier momento del período es seguido por cualquier otro carácter, la petición devuelve un 404. Cualquier ayuda sería muy apreciada!

Solución

Debido a la falta de otras opciones, yo he ido en la dirección de Maggie sugerido y utilizado la respuesta de esta pregunta para crear una regla de reescritura anexar automáticamente una barra al final, cuando necesito un correo electrónico en la dirección 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>
  • Ver también pregunta similar: stackoverflow.com/questions/11728846/…
  • Gracias @Jonathan-Freeland, esta solucionado mi mismo problema. Yo estoy a la izquierda moviendo mi cabeza de que Microsoft pensaron que este era un buen diseño. Cualquier otro framework web que se precie le permite rápidamente y fácilmente configurar estática / dinámica de direcciones Url con una expresión regular o cualquier otra cosa que asumir un período de siempre significa un archivo estático y causando a los desarrolladores para saltar a través de aros para evitar esta suposición. Lo que es innecesario desperdicio de tiempo.
  • Gracias @Jonathan-Freeland! Yo estaba en una situación en la que yo no podía cambiar el cliente, pero sólo tenía que añadir la maldita barra al final, la solución a mi me funciono perfectamente

3 Comentarios

  1. 76

    Sería la adición de una barra diagonal de trabajo para su escenario?

    http://localhost:33021/api/employees/[email protected]/
    • No, pero me encantaría evitar esto si es posible.
    • ¿Alguien puede hacer un rápido escribir sobre por qué la adición de la Barra de las Fuerzas Asp.net para omitir los controladores que intenta cargar la Extensión Orientada a los Recursos?
    • gracias , muy simple +1
    • a mí me funcionó, gracias mucho
    • No solucionar el problema, pero he recibo el error 404 en un servidor de implementar, y se espera la respuesta de otro implementación de la misma base de código. Así que no es otro que subyacen problema de configuración donde, si se configuran correctamente, la barra diagonal no es necesario.
  2. 2

    Verificación de la configuración de IIS:

    Home Directory -> Configuration

    Editar el .aspx extensión de la aplicación y asegúrese de que la configuración de Verify that file exists está apagado.

    ACTUALIZACIÓN

    He probado con un defecto MVC4 Web API proyecto

    URL: http://localhost:10983/api/values/[email protected]

    Acción en ValuesController:

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

    Esta fue la respuesta:

    <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">[email protected]</string>
    • Hola, tengo curiosidad por saber si ha marcado esta como que ha sido un problema para mí en el pasado (en serio – solo por curiosidad). Thx.
    • ¿Has probado con una API controlador?
    • Vergonzosamente no. Pero ahora tengo (y funcionó, aunque TBH no me lo esperaba para). Actualizar mi respuesta. Thx
  3. 1

    Esto es lo que ha funcionado para mí:

    Estaba corriendo en targetFramework = 4.6.1. He actualizado a la 4.6.2 y añadió que esta en la 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>

    La requestPathInvalidCharacters="" es ser capaz de tener cosas como & etc en URI, en forma codificada, por supuesto.

Dejar respuesta

Please enter your comment!
Please enter your name here