2011-03-23 41 views
0

我的URL重寫工作,我發現在asp.net網站一個教程, 的方式我這樣做是頁面未正確重定向,URL重寫(Asp.NET)

URL我進入http://localhost:1573/WebNew/web/first-web

現在我已經wriiten一類

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。您正在尋找(或它的一個依賴)的資源可能已被刪除,更名或暫時不可用。請檢查以下網址並確保它拼寫正確。

請求的URL:/WebNew/web/Default.aspx

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

請幫助我

編輯

Thnks的答案,但我不能接受你的答案,也沒有評論按鈕工作對我來說,這是我編輯我的職位的原因。我得到JavaScript錯誤:對象預期和對象問題爲空。 enter image description here

@Waqas Raja謝謝你的回答,現在工作正常。但是當我在Default.aspx頁面的(!IspostBack)事件中放置斷點時,我可以看到它正在到達次。加載頁面後,幾張圖片消失了。多重刷新是問題嗎?任何想法爲什麼它一次又一次地去if(!IsPostBack)事件。 感謝您的幫助

EDIT1

@Waqas拉賈我會接受你從不同的充瀏覽器登錄後回答。

EDIT2

@Waqas拉賈我顯示我的主頁畫面像這樣

有其也被以這種方式顯示其他一些圖片,他們都來了正常加載時正常,但當我使用URL重寫時,我只能看到ALT文本。

我已經試過這也

但同樣的結果。 :-(任何建議?

通過檢查原始網址,我可以看到除頁面外,還有很多其他請求,例如jpg,.js就像您提到的那樣 我更新了代碼,是否正確?因爲我無法看到圖像和幾個JavaScript功能。

EDIT3

@Waqas拉賈非常感謝您的幫助。我現在可以看到圖像。我已將HTML圖像移除到asp:Image controla並將ImageURL保留爲〜/ images/facebook_icon.png。

但我仍然無法看到頁面上的JS文件效果,我把src =「〜/ JS/jQuery.js」,但它仍然無法正常工作。我已經把你提到的代碼放在我的班級[你剛纔指導我的地方]。

+1

您需要使用相對路徑來根目錄像'〜/ pathToImagesDirectory/imageName.jpg'做URL重寫 – 2011-03-23 11:07:51

+1

是其右然而,當您需要跳過其他擴展。看看你的編輯帖子 – 2011-03-23 11:36:16

回答

1

問題是與你的重寫路徑,具有以下

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

更換編輯1項您的要求已被更改,但是讓我嘗試解釋一下怎麼回事錯了。

該問題必須與您的相對路徑的圖像,也可能發生在外部JavaScript和CSS的情況下。

您應該使用相對於根目錄的路徑。

~指虛擬目錄的根目錄,其資源(通常爲頁面或某時間的外部css)正在被訪問。

~/pathToImagesFolder/imageName.ext

包括JavaScript和CSS時,您應該謹慎,並使用相對路徑到您的網站或虛擬目錄的主目錄。然而,在CSS內部,在這方面不需要採取任何措施。

關於IsPostBack問題

我想這個問題是你的,如果條件

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

在這裏,您重定向包含/web/在URL和最有可能你的頁面中您要訪問像一些資源的任何請求圖像或外部css或js在其url中包含/web/,所以當請求到達時,它將被重定向到default.aspx並引發問題。您可以通過以下方式進行確認:Request.RawUrlPage_LoadDefault.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; 
} 
+0

現在我的IE瀏覽器運行良好。 +1作爲您的迴應,我將您的回答標記爲完美答案。再次感謝您的幫助 – Chris 2011-03-24 07:31:10

+0

@Chris,謝謝! – 2011-03-24 08:01:42