Как получить без URL "default.aspx"? - PullRequest
0 голосов
/ 21 февраля 2009

Я реализовал следующий код в файле Global.asax моего веб-приложения.

void Application_BeginRequest()
{

    string rule = ConfigurationManager.AppSettings.Get("WwwRule");

    HttpContext context = HttpContext.Current;
    if (context.Request.HttpMethod != "GET" || context.Request.IsLocal)
    {
        return;
    }

    if (context.Request.PhysicalPath.EndsWith(".aspx", StringComparison.OrdinalIgnoreCase))
    {
        string url = context.Request.Url.ToString();

        if (!url.Contains("://www.") && rule == "add")
        {
            string url = context.Request.Url.ToString().Replace("://", "://www.");
            context.Response.Redirect(url);
        }
    }
}

Когда я работаю над кодом, он работает следующим образом

example.com перенаправляет на www.example.com / default.aspx

www.example.com перенаправляет на www.example.com

http://www.example.com/ перенаправляет на http://www.example.com/

последние два условия работают очень хорошо. Но первое условие не работает должным образом, потому что он добавляет «default.aspx» в URL, который меня не интересует.

Может кто-нибудь подскажите, пожалуйста, как это сделать, как показано ниже

example.com должен перенаправить на http://www.example.com

Спасибо

Ответы [ 3 ]

2 голосов
/ 21 февраля 2009

Скорее всего, Request.Url добавляет default.aspx, потому что эта страница фактически обслуживается в данный момент (IIS делает это прозрачным для вас, потому что это одна из страниц по умолчанию).

Когда вы создаете новый URL, который собираетесь перенаправить, добавьте еще один .Replace ("/ default.aspx", "") в его конец. Итак ...

string url = context.Request.Url.ToString().Replace("://", "://www.").Replace("/default.aspx", "");
2 голосов
/ 21 февраля 2009

На самом деле, /default.aspx добавляется до того, как запрос достигает события BeginRequest. Если вы хотите удалить его, вы должны удалить его:

void Application_BeginRequest() {
    string rule = ConfigurationManager.AppSettings.Get("WwwRule");

    HttpContext context = HttpContext.Current;
    if (context.Request.HttpMethod != "GET" || context.Request.IsLocal) {
        return;
    }

    if (context.Request.PhysicalPath.EndsWith(".aspx", StringComparison.OrdinalIgnoreCase)) {
        string url = context.Request.Url.ToString();

        if (!url.Contains("://www.") && rule == "add") {
            url = url.Replace("://", "://www.");
            if (url.EndsWith("/default.aspx", StringComparison.OrdinalIgnoreCase) {
               url = url.Substring(0, url.Length - 13);
            }
            context.Response.Redirect(url);
        }
    }
}
0 голосов
/ 06 февраля 2014

измените ваш webconfig с кодом ниже: это решит мою проблему.

<?xml version="1.0"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="default.aspx Redirect" stopProcessing="true">
                    <match url="^(.*\/)*default\.aspx$" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_METHOD}" negate="true" pattern="^POST$" />
                    </conditions>
                    <action type="Redirect" url="{R:1}" redirectType="Permanent"/>
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>
...