我怎么能忽略“;”在ASP.net中的URL中的参数?

时间:2011-01-28 18:44:00

标签: .net asp.net url

这应该是一个简单的问题,但我是.net的初学者,我在其他论坛中找不到任何解决方案等。

我在asp.net工作,使用VB代码来处理页面事件。我正在使用localhost服务器进行调试。

我在Intranet(在我无法访问的其他服务器中)使用第三方用户身份验证器来加载我的网站。此身份验证器检查用户登录并调用我的页面传递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 个答案:

答案 0 :(得分:1)

如果使用IIS 7 / 7.5查看URL rewriting module - 您应该能够编写一条删除;jsessionid=null的规则,我认为这比忽略{{}更好1}}。

对于IIS 6,可以使用third party URL rewriters来实现相同的效果。

答案 1 :(得分:1)

您可以实现从请求路径中删除jsession标记的IHttpModule。一个简单的实现看起来像这样:

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