2010-10-19 8 views
1

je dois chercher le nom de domaine et le chemin de la demande de fournir les valeurs de retour suivantes:Récupérer nom de domaine et le chemin en utilisant ASP.net

domain1.com/default.aspx returns  domain1.com/default.aspx 
domain1.com/    returns  domain1.com/ 
domain1.com     returns  domain1.com 

À l'heure actuelle chaque URL qude j'essaie semble revenir domain.com/default.aspx peu importe ce que dit la barre d'adresse dans mon navigateur. Toute solution à cela?

J'ai essayé beaucoup de différentes fonctions intégrées pour récupérer des parties de la demande, mais aucune ne semble fournir les résultats souhaités.

+0

Je peux me tromper, mais le vôtre problème serait résolu si l'on compare le nom de la page retrieven à 'String.Empty' (cela signifie que l'utilisateur tapé dans le navigateur seul nom de domaine) . – zgorawski

+0

Oui, mais quelle fonction peut récupérer le nom de la page en tant que vide lorsqu'il n'est pas spécifié? Tous semblent retourner default.aspx à un moment donné. –

Répondre

1

Il existe une solution à votre problème.

HttpContext.Current.Request.Url retournera un objet Uri qui contient toutes les parties de l'URL décomposées pour vous. De cela, vous devriez être en mesure d'obtenir ce que vous cherchez. Plus précisément, la propriété que vous souhaitez est Uri.Authority.

EDIT: Essayez quelque chose comme ceci:

public static string GetPath(this HttpRequest request) 
    { 
     var authority = request.Url.Authority; 
     var pathAndQuery = request.Url.PathAndQuery; 
     var query = request.Url.Query; 
     var path = pathAndQuery.Substring(0, 
         pathAndQuery.Length - query.Length)); 

     if (!authority.EndsWith("/")) 
      authority += "/"; 

     return authority + path; 
    } 
+0

URI autorité semble seulement retourner le nom de domaine. –

+0

Voir ci-dessus. (N'a pas testé, mais devrait être dans le stade.) –

-1

Veuillez fournir le document par défaut dans IIS, et il fonctionnera de la même manière que vous le souhaitez. donc vous pouvez définir products.aspx dans le document par défaut domain1.com et dans domain2.com le rendre categories.aspx et tout sera réglé.

+0

J'ai besoin d'une solution programmatique pas un via IIS –

0

Vous souhaiterez peut-être avoir un seul site Web dans IIS avec plusieurs liaisons/en-têtes d'hôte pour vos domaines, et supprimer default.aspx des documents par défaut. Vous devrait alors pouvoir utiliser l'élément de configuration urlMappings pour faciliter vos redirections. Si vous avez besoin de plus amples informations sur les urlMappings consultez ce lien: http://dotnetperls.com/urlmappings-aspnet

0

Vous pouvez créer un HttpModule pour chaque domaine - mettre en œuvre l'événement Application_BeginRequest comme ceci:

private void Application_BeginRequest(object source, EventArgs e) 
{ 
    // get context and file path 
    HttpContext context = ((HttpApplication)source).Context; 
    string filePath = context.Request.FilePath; 

    if (filePath.Equals("/")) 
    { 
     // redirect to products page 
     context.Response.Redirect(filePath + "products.aspx"); 
    } 
} 

Cela devrait rediriger http://www.domain1.com/-http://www.domain1.com/products.aspx - demandes de http://www.domain1.com/default.aspx ne doit pas rediriger.

Questions connexes