页面没有正确重定向,URL重写(Asp.NET)

时间:2011-03-23 09:41:10

标签: asp.net urlrewriter

我正在进行URL重写,我在asp.net网站上找到了一个教程, 我这样做的方式是

我正在输入http://localhost:1573/WebNew/web/first-web

的网址

现在我已经开始了一个班级

public class FixURLs : IHttpModule 
{
    public FixURLs()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    #region IHttpModule Members

public void Dispose()
{
    // do nothing
}

public void Init(HttpApplication context)
{
    context.BeginRequest += new EventHandler(context_BeginRequest);
}

#endregion

void context_BeginRequest(object sender, EventArgs e)
{
    HttpApplication app = (HttpApplication)sender;

    /*// checking page extension
    switch (System.IO.Path.GetExtension(app.Request.Url.AbsoluteUri.ToLower()))
    {
        case ".bmp":
        case ".gif":
        case ".jpg":
        case ".jpe":
        case ".jpeg":
        case ".png":
        case ".css":
        case ".js":
        case ".txt":
        case ".swf":
            // don't redirect, these requests may required in many cases
            return;
            break;
    }*/

    if (app.Request.RawUrl.ToLower().Contains("/web/"))
    {
        **if (app.Request.RawUrl.ToLower().Contains(".png")
              || app.Request.RawUrl.ToLower().Contains(".gif")
              || app.Request.RawUrl.ToLower().Contains(".js"))
        {
            return;
        } **
        DatabaseLayer dbLayer = new DatabaseLayer();

        string urlFromBrowser = app.Request.RawUrl.ToLower();
        string[] urlFormat = urlFromBrowser.Split('/');
        urlFromBrowser = urlFormat.GetValue(2).ToString() + "/" + urlFormat.GetValue(3).ToString();

        int WebId = dbLayer.GetWebURLId(urlFromBrowser.Trim());

        app.Context.RewritePath("Default.aspx", "", "WebId="+WebId);

    }
}

但问题是,它没有重定向到Default.aspx页面。

我收到以下错误:

描述:HTTP 404.您正在查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用。请查看以下网址,确保拼写正确。

请求的网址:/WebNew/web/Default.aspx

我可以看到它正在请求URL /webNew/web/Default.aspx,但我只需要/webnew/default.aspx?WebId=2

请帮助我

修改

答案是肯定的,但是我无法接受你的回答,也没有评论按钮对我有效,这就是我编辑帖子的原因。我收到JavaScript错误:预期对象和对象问题为空。 enter image description here

@Waqas Raja谢谢你回答,现在工作正常。但是,当我将断点放在Default.aspx页面的(!IspostBack)事件中时,我可以看到它已经过了 8 次。加载页面后,几张图片消失了。多次刷新是问题吗?任何想法为什么它会一次又一次地去if(!IsPostBack)事件。 谢谢你的帮助

EDIT1

@Waqas Raja我会接受你从不同的浏览器登录后回答。

EDIT2

@Waqas Raja我正在我的主页上显示图像

还有其他一些图像也以这种方式显示,正常加载时它们都正常,但是当我使用URL重写时,我只能看到alt文本。

我也试过这个

但结果相同。 :-(任何建议?

通过检查原始网址,我可以看到除了页面之外还有很多请求,例如jpg,.js就像你提到的那样。 我已更新代码,是否正确?因为我无法看到图像和少量的javascript函数。

EDIT3

@Waqas Raja非常感谢您的帮助。我现在可以看到图像了。我已将HTML图像移除到asp:Image controla并将ImageURL保留为〜/ images / facebook_icon.png。

但我还是看不到页面上的JS文件效果,我把src =“〜/ JS / jQuery.js”但它仍然无法正常工作。我已将您提到的代码放在我的班级中[就在您引导我的地方]。

1 个答案:

答案 0 :(得分:1)

问题在于您的重写路径,请将其替换为以下

app.Context.RewritePath("~/webnew/Default.aspx", "", "WebId=" + WebId);

编辑1 您的要求已更改,但让我尝试解释哪里出错了。

问题必须与你的相对路径的图像有关,并且在外部javascript和css的情况下也可能发生。

您应该使用相对于根目录的路径。

~指的是虚拟目录的根目录,其资源(通常是页面或某个时间的外部css)正在被访问。

~/pathToImagesFolder/imageName.ext

在包含javascript和css并使用相对于您网站或虚拟目录的主目录的路径时,您应该小心谨慎。但是在CSS内部,在这方面没有必要采取措施。

关于IsPostBack问题

我想问题是你的if条件

if (app.Request.RawUrl.ToLower().Contains("/web/"))

在这里,您要重定向网址中包含/web/的任何请求,并且很可能在您的网页内部访问某些资源,例如图片或外部css或js,其网址中包含/web/,因此请求到达它被重定向到default.aspx并且问题引发。您可以通过查看Request.RawUrl <{1}}事件Page_Load中的Default.aspx进行确认

因此,在比较请求的资源路径和重定向时,您需要更多检查。如果你检查并跳过重定向所有以.css .jpg .JPG .js .gif e.t.c

等扩展名结尾的网址,那就更漂亮了

我希望你的理解能够立即建立。

编辑2 您需要跳过所有其他扩展程序

// checking page extension
switch (System.IO.Path.GetExtension(app.Request.Url.AbsoluteUri.ToLower()))
{
    case ".bmp":
    case ".gif":
    case ".jpg":
    case ".jpe":
    case ".jpeg":
    case ".png":
    case ".css":
    case ".js":
    case ".txt":
    case ".swf":
        // don't redirect, these requests may required in many cases
        return;
        break;
}