Как я могу игнорировать ";" параметр в URL, в ASP.net? - PullRequest
0 голосов
/ 28 января 2011

Это должен быть простой вопрос, но я новичок в .net, и я не нашел никакого решения на других форумах и т. Д.

Я работаю в asp.net, используяVB код страницы событий.Я использую локальный сервер для отладки еще.

Я использую аутентификатор пользователей третьей части в интрасети (на другом сервере, к которому у меня нет доступа) для загрузки моего сайта.Этот аутентификатор проверяет логин пользователя и вызывает мою страницу, передавая данные пользователя в URL.Но, кроме того, URL содержит оператор ;jsessionid=null перед ?, который портит мою загрузку страницы.В браузере появляется сообщение:

    Server Error in '/' Application.
    The resource cannot be found.
    Description: HTTP 404. The resource you are looking for (or one of its   
                 dependencies) could have been removed, had its name changed, or
                 is temporarily unavailable. Please review the following URL 
                 and make sure that it is spelled correctly.
    Requested URL: /page.aspx;jsessionid=null

Например: аутентификатор вызывает:

    "http://localhost:61932/page.aspx;jsessionid=null?param1=data1&param2=data2"

Если я проверяю с помощью:

    "http://localhost:61932/page.aspx?param1=data1&param2=data2"

Все в порядке.Но когда появляется jsessionid=null, возникает ошибка.

Кажется, это jsessionid аргумент, предназначенный для jsp страниц, но я не могу игнорировать этот аргумент в .net.
Могу ли я что-то сделать, например, рассмотреть сеанснастраивать сервер?

Ответы [ 2 ]

1 голос
/ 28 января 2011

Вы можете реализовать IHttpModule, который удаляет токен jsession из пути запроса. Простая реализация выглядела бы так:

public class RemoveSemicolonModule : IHttpModule
{
    private static Regex regex = new Regex("\\;[^\\?]+");

    public void Init(HttpApplication context)
    {
        context.BeginRequest += RemoveSemicolon;
    }

    private void RemoveSemicolon(object sender, EventArgs e)
    {
        HttpApplication application = (HttpApplication)sender;
        string path = application.Context.Request.Url.PathAndQuery;

        var match = regex.Match(path);

        if (match.Success)
        {
            path = path.Remove(match.Index, match.Length);

            // Add the jSessionToken to the request context, so it is still accessible at a later stage.
            application.Context.Items["jSessionToken"] = match.Value;
        }

        application.Context.RewritePath(path);
    }

    public void Dispose() {}
}

Вы должны зарегистрировать HttpModule в вашем файле web.config. См. эту страницу для получения дополнительной информации.

1 голос
/ 28 января 2011

Если вы используете IIS 7 / 7.5, посмотрите на модуль перезаписи URL - вы сможете написать правило, которое исключит ;jsessionid=null, что, на мой взгляд, было бы лучше, чем просто игнорировать;.

Для IIS 6 есть сторонние устройства перезаписи URL , которые можно использовать для того же эффекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...