这应该是一个简单的问题,但我是.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¶m2=data2"
如果我测试:
"http://localhost:61932/page.aspx?param1=data1¶m2=data2"
没关系。但是,当出现jsessionid=null
时,会发生错误。
它似乎是jsessionid
一个用于jsp
页面的论据,但我没有在.net
中实现忽略这一点。
我会做一些事情,比如考虑会话或配置服务器吗?
答案 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。