ASP.NET MVC ne sert pas de document par défaut

j'ai un ASP.NET application MVC où la page par défaut devrait être indexée.html qui est un fichier réel sur le disque.

je peux parcourir le fichier en utilisant www.mydomain.com/index.html donc je sais qu'il sera servi et existe mais si j'utilise www.mydomain.com j'ai un 404.

j'ai veillé à ce que le document par défaut est défini correctement dans IIS7 et j'ai même été jusqu'à commentées tous les itinéraires définis dans mon global.asax pour m'assurer que je n'ai pas de route qui cause ça. problème.

pour résumer:

  • j'ai un index.le fichier html sur le disque et IIS7 est défini pour utiliser l'index.html comme document par défaut.
  • si je retire mon ASP.NET application MVC et quitter l'index.le fichier html Sert de document par défaut comme prévu.
  • si je publie mon ASP.NET application MVC puis l'index.html ne se fait pas servir par le document par défaut.

est-ce que quelqu'un sait comment obtenir ASP.NET MVC pour servir le document par défaut?

21
demandé sur Jon Cahill 2010-03-11 07:28:51

6 réponses

ASP.Net le routage MVC est contrôlé par Global.asax / Global.asax.cs fichiers. Le routage out-of-the-box ressemble à ceci:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
}

Si aucun chemin n'est spécifié, c'est à dire. www.domain.tld/, la route est la chaîne vide, "". Par conséquent, le routage recherche un contrôleur de ce nom. En d'autres termes, il recherche un contrôleur sans nom à tous. Quand il ne trouve aucun contrôleur, il sert un 404 NOT FOUND page d'erreur.

pour résoudre le problème, vous pouvez soit faire une correspondance entre ce chemin et quelque chose significatif ou bien ignorer entièrement cette route, en passant le contrôle à l'index.fichier html:

routes.IgnoreRoute("");
28
répondu pius 2011-07-03 00:05:07

j'ai eu un problème similaire avec une application WebForms. Dans votre site web.config assurez-vous que l'attribut resourceType du gestionnaire de fichier statique sous system.le serveur web est configuré pour.

<add name="StaticFile" path="*" verb="*" type="" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" scriptProcessor="" resourceType="Either" ...
2
répondu Luke Smith 2011-06-01 11:52:50

j'ai trouvé un moyen de contourner cela. Si vous voulez de l'index.code html pour être à la racine de votre application MVC (j'.e à côté de votre contrôleur/modèle/vue/appdata etc dossiers), vous pouvez faire ceci:

vous avez home.html,aboutus.html et contactus.html.

//this route matches (http://mydomain.com/somekindofstring)

routes.MapRoute(
    "SingleRootArg",
    "{id}",
    new { controller = "Home", action = "Details", id=""});

// so now that you have your route for all those random strings. 
// I had to do this for vanity urls. mydomain.com/ronburgandy  etc. however, 
// mydomain.com/index.html will also come in just how you'd expect. 

//Just an example of what you COULD do. the user would see it as root html. 

Public ActionResult Details(string id)
{

    //let me save you the trouble - favicon really comes in as a string *ANGER*
    if(String.IsNullOrEmpty(id) || id.ToLower().Contains("favicon.ico"))
        return Redirect("~/index.html");
    if(id == "aboutus.html")
        return Redirect("~/aboutus.html");
    if(id == "contactus.html")
        return Redirect("~/contactus.html");
    if(id == "index.html")
        return Redirect("~/index.html");
}

index.htmlaboutus.html index.html sont maintenant au même niveau que mon fichier CSPROJ.

2
répondu user398753 2012-08-03 19:38:37

Désolé pour ressusciter cette maman, mais je ne crois pas que cette question n'a jamais été un défaut de document de problème. En fait, vous ne voulez probablement pas avoir un document par défaut mis comme beaucoup d'autres answerer ont déclaré.

Eu ce problème aussi, un problème similaire. la cause de mon problème était que le Pool de demandes pour le site était réglé pour utiliser .net Framework v2 et aurait dû être réglé à v4. une fois que je l'ai changé, il s'est chargé correctement.

2
répondu Madullah 2014-04-05 13:44:49

Vous pouvez ignorer la route dans votre application MVC et laisser IIS la servir.

routes.IgnoreRoute("index.html")
etc
1
répondu tarn 2010-07-22 06:34:31

je suppose que vous avez ajouté l'index.html vous-même puisque cette extension serait inconnue du cadre mvc.

votre page d'index par défaut dans mvc est//domain / home / index et est physiquement index.aspx.

si vous appelez votre domaine en utilisant / / domain alors le moteur de routage assumera /home / index.aspx et pas index.HTML.

-3
répondu griegs 2010-03-11 04:51:36