2011-01-28 2 views
0

Это должно быть простой вопрос, но я новичок в .net и я не нашел ни одного решения в других форумах и т.д.Как я могу игнорировать ";" параметр в URL-адресе, в ASP.net?

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

Я использую аутентификатор пользователей третьей части в интрасети (на другом сервере, к которому я не могу получить доступ) для загрузки моего сайта. Этот аутентификатор проверяет вход пользователя и вызывает мою страницу, передающую пользовательские данные в 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.
Буду ли я что-то делать, например, рассматривать сеанс или настраивать сервер?

+1

Какой сервер вы используете? IIS 6? 7? 7,5? Apache с mod_mono? Что-то другое? – Oded

+1

Итак, повторите свой вопрос. Вы хотите только игнорировать параметры, появляющиеся после ';' ??? –

+0

Я хотел бы игнорировать параметр «jsessionid = null», поддерживающий обычные параметры запроса URL-адреса. Я должен использовать их для идентификации пользователя. – Alex

ответ

1

Вы можете реализовать 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. См. this page для получения дополнительной информации.

1

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

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

Смежные вопросы