2008-11-09 23 views
8

He intentado configurar mi aplicación Beta 1 MVC en IIS 6 y no puedo ejecutarla correctamente. He añadido una asignación de comodín a la DLL .net isapi como se sugiere en otras entradas del blog, pero sale el siguiente error cuando accedo a la raíz del sitio web:ASP.NET MVC en IIS 6 - asignación de comodines: la solicitud entrante no coincide con ninguna ruta

The incoming request does not match any route. 
.. 
[HttpException (0x80004005): The incoming request does not match any route.] 
    System.Web.Routing.UrlRoutingHandler.ProcessRequest(HttpContextBase httpContext) +147 
    System.Web.Routing.UrlRoutingHandler.ProcessRequest(HttpContext httpContext) +36 
    System.Web.Routing.UrlRoutingHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext context) +4 
    HCD.Intranet.Web.Default.Page_Load(Object sender, EventArgs e) +81 
    System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15 
    System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33 
    System.Web.UI.Control.OnLoad(EventArgs e) +99 
    System.Web.UI.Control.LoadRecursive() +47 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436 

estoy usando la página Default.aspx suministrado en el Aplicación de plantilla MVC que reescribe el acceso a la raíz del sitio web correctamente.

public partial class Default : Page 
{ 
    public void Page_Load(object sender, System.EventArgs e) 
    { 
     HttpContext.Current.RewritePath(Request.ApplicationPath); 
     IHttpHandler httpHandler = new MvcHttpHandler(); 
     httpHandler.ProcessRequest(HttpContext.Current); 
    } 
} 

Si trato y acceder a una ruta dentro de la aplicación, como por ejemplo/Proyecto, consigo el estándar de IIS página de error 404, no la página de error .net.

He intentado añadir la siguiente línea a mi sección httpHandlers Web.config:

<add verb="*" path="*" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 

Esto me dio un error diferente - la página de error 404 .net.

que añade lo siguiente a mi Global.asax, que no hizo nada:

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    if (Context.Request.FilePath.Equals("/")) 
     Context.RewritePath("Default.aspx"); 
} 

estoy usando la siguiente configuración de ruta (utiliza el enrutamiento de descanso suministrado por el proyecto MvcContrib):

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
SimplyRestfulRouteHandler.BuildRoutes(routes); 
routes.MapRoute(
"Default", 
"{controller}/{action}/{id}", 
new { controller = "Home", action = "Index", id = "" } 
); 

Cualquier sugerencia sería recibida greyy ya que he agotado todas las opciones por el tiempo que tengo ahora.

Muchas gracias.

Respuesta

8

OK, tengo trabajo.

el problema era que estaba usando la automatización msbuild para empacar el archivos que necesitaba implementar, y me faltaba global.asax.

Parece que si global.asax no se implementa en el sitio, ninguna de las rutas se conecta. Esto significa que al tocar la raíz del sitio web correctamente aparece el error "La solicitud entrante no coincide con ninguna ruta" y cualquier otra solicitud ya no se enruta a sus clases de controlador, por lo que resulta un 404.

HTH.

+0

Perfecto: este fue mi problema. Estaba compilando a través de NAnt/MSBuild y no estaba incluido el archivo Global.asax. Tener ese archivo allí resuelve todo. –

+0

Hmm, tengo el mismo problema, y ​​yo también estoy usando scripts de compilación para empaquetar los archivos, pero mi archivo Global.asax definitivamente está presente en la carpeta raíz web. –

1

Desafortunadamente IIS 6 necesita una extensión de archivo para asignar la petición al controlador de la derecha lo que significa que tendrá que utilizar el sufijo .mvc en sus nombres de los controladores, como /{controller}.mvc/{action}

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

SimplyRestfulRouteHandler.BuildRoutes(routes); 

routes.MapRoute(
     "Default", 
     "{controller}.mvc/{action}/{id}", 
     new { controller = "Home", action = "Index", id = "" } 
); 

Sin embargo, existen formas de evitar esto dependiendo de su nivel de control en el servidor IIS 6. Por favor refiérase a las páginas siguientes para obtener más información

18

Esto es lo que hice para conseguir las direcciones URL sin extensión trabajar con IIS 6 y ASP.NET MVC Beta 1.

  • Cree un proyecto predeterminado ASP.NET MVC Beta y compílelo.
  • Cree un nuevo sitio web de IIS que apunte a en el directorio de la aplicación.
  • En las propiedades de IIS para el sitio web , haga clic en la pestaña HomeDirectory .
  • Haga clic en el botón "Configuración ...". En la pestaña "Asignaciones", haga clic en "Insertar ..."
  • Al lado de la "aplicación Comodín mapas" etiqueta en el cuadro de texto, escriba "c: \ windows \ Microsoft.\ Framework \ v2.0.50727 \ aspnet_isapi.dll"
  • Desactive la casilla "Verificar que existe archivo" Haga clic en Aceptar
  • Vaya a/home Funcionó!

No debería ser necesario web.config cambiar en absoluto. Sólo tiene que asignar a todas las solicitudes de IIS a la DLL ISAPI de ASP.NET ASP.NET de lo contrario nunca conseguirá esas peticiones.

+0

muchas gracias !! – Sekhar

+0

Gracias por publicar esto, especialmente el 'Desmarque la casilla etiquetada' Verifique que existe el archivo 'Haga clic en Aceptar' paso que había olvidado. – Inigoesdr

Cuestiones relacionadas