2011-07-17 25 views
8

Tengo una vista parcial que se muestra en una página que no es HTTPS, pero POSTS a un controlador que requiere SSL. La definición del formulario es el siguiente:Url.Acción que no incluye el número de puerto

 <form id="authForm" 
      method="post" 
      action="@Url.Action("authenticate", "auth", new {}, "https")"> 

El problema que estoy teniendo es que, dentro de Visual Studio y cuando la depuración, el host y el puerto son localhost:64043. Sin embargo, la llamada anterior Url.Action no ingresa el número de puerto, lo que significa que el navegador dirige a mi instalación de IIS. ¿Debo agregar algo más o anular este método? Quiero que mi aplicación sea independiente de la ubicación.

¡Gracias de antemano!

Respuesta

10

podría incluir de esta manera:

@Url.Action(
    "authenticate", 
    "auth", 
    null, 
    "https", 
    Request.Url.Host + ":" + Request.Url.Port 
) 

Por supuesto, esto significa que su servidor web local debe ser compatible con SSL, lo que no es el caso de la Cassini. Puede usar IIS Express para que esto funcione.

+0

Hola, muchas gracias por esto. Resulta que IIS Express ya estaba instalado. Sin embargo, el problema que estoy teniendo ahora es que aunque IIS muestra un certificado Express instalado, obtengo 'No se puede establecer una conexión segura con el servidor. Esto puede ser un problema con el servidor o puede requerir un certificado de autenticación del cliente que no tiene. Como un error cuando intenta publicar el formulario ... argh! –

0

El servidor de desarrollo integrado no es compatible con HTTPS, pero puede usar su IIS local, consulte HERE.

0

Las conexiones Http y https se realizan generalmente en dos puertos diferentes, por lo que si cambia de un protocolo a otro, debe utilizar el puerto estándar o suministrar uno específico. No hay una manera sensata de que un sistema genérico pueda determinar el puerto correcto

Cuestiones relacionadas