0

Обрезка строки запроса и возврат чистого URL в C# ASP.NET

9

Я хочу взять оригинальный URL, обрезать параметры строк запроса и вернуть очищенную версию URL. Это должно происходить на протяжении всего приложения, поэтому было бы идеально реализовать это через глобальный файл Global.asax. Я также думаю, что целесообразно использовать редирект 301.

Например:

Входной URL: www.website.com/default.aspx?utm_source=twitter&utm_medium=social-media

Выходной URL: www.website.com/default.aspx

Как лучше всего достичь этой цели?

5 ответ(ов)

1

System.Uri — ваш лучший друг в данной ситуации. Этот класс предоставляет множество полезных функций, но в вашем случае вам нужен метод GetLeftPart:

string url = "http://www.website.com/default.aspx?utm_source=twitter&utm_medium=social-media";
Uri uri = new Uri(url);
Console.WriteLine(uri.GetLeftPart(UriPartial.Path));

Данный код выведет: http://www.website.com/default.aspx.

[Класс Uri требует, чтобы протокол, например http://, был указан.]

Метод GetLeftPart по сути говорит: "верни левую часть URI вплоть до и включая ту часть, которую я укажу". Это может быть Scheme (только часть http://), Authority (http://www.website.com), Path (/default.aspx) или Query (строка запроса).

Если вы находитесь на странице aspx, вы можете затем использовать Response.Redirect(newUrl), чтобы перенаправить пользователя.

0

Вот простой трюк:

Dim uri = New Uri(Request.Url.AbsoluteUri)
Dim reqURL = uri.GetLeftPart(UriPartial.Path)

Этот код создает объект URI из текущего URL запроса и затем извлекает его левую часть, включая путь. Это полезно, если вам нужно получить базовый URL без параметров и якорей.

0

Вот быстрый способ получить корневой путь без полного пути и параметров запроса:

string path = Request.Url.AbsoluteUri.Replace(Request.Url.PathAndQuery, "");

Этот код использует метод Replace для удаления пути и параметров запроса из полного URL, оставляя только корневой путь.

0

Ваш код выглядит довольно неплохо. Вот как его можно перевести на русский в стиле ответа на StackOverflow:


Ваше решение выглядит вполне уместным.

string rawUrl = String.Concat(this.GetApplicationUrl(), Request.RawUrl);

if (rawUrl.Contains("/post/"))
{
    bool hasQueryStrings = Request.QueryString.Keys.Count > 1;

    if (hasQueryStrings)
    {
        Uri uri = new Uri(rawUrl);
        rawUrl = uri.GetLeftPart(UriPartial.Path);

        HtmlLink canonical = new HtmlLink();
        canonical.Href = rawUrl;
        canonical.Attributes["rel"] = "canonical";
        Page.Header.Controls.Add(canonical);
    }
}

В дополнение к этому, возможно, вам потребуется функция для корректного получения URL вашего приложения. Это решение должно работать без проблем.

Если у вас возникли дополнительные вопросы или нужно разъяснение по какому-то аспекту, не стесняйтесь спрашивать!

0

Посмотрите на класс UriBuilder. Вы можете создать его, передав строку URL, и этот объект затем разберет URL, позволяя вам получить доступ только к тем элементам, которые вам нужны.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь