2016-02-04 254 views
0

我想用ASP.NET中的查詢字符串重寫URL。該URL看起來像如下:Url用ASP.NET查詢字符串重寫

http://localhost:51392/productdetails.aspx?id=zdpMPZVXkDtjw92Crx7eew== 

我想的URL改寫成這樣:

http://localhost:51392/Details/zdpMPZVXkDtjw92Crx7eew== 

我曾嘗試使用下面的方法來重寫URL(像這樣)的嘗試:

<urlMappings> 
     <add url="~/Shop" mappedUrl="~/shop.aspx"/> 
</urlMappings> 

但我真的不知道如何正確地映射網址與查詢字符串?什麼是最簡單的或者其他可以用來實現這個目的的方法?

謝謝!

P.S.你們這是如何我試圖訪問rewriten網址:

<a href='<%# "/productdetails.aspx?id=" + RL_DAL.RijndaelHelper.AES.Encrypt(Eval("ProductID").ToString(),"key_to_enrypt") %>'><%# Eval("ProductName") %> 
+1

可能的重複[Url重寫在asp.net中,但保留原始網址](http://stackoverflow.com/questions/3678371/url-rewriting-in-asp-net-but-maintaining-the -original-url) – Dalorzo

+0

如果我沒有弄錯,你可以使用**'ServerVariables ** ** HTTP_X_ORIGINAL_URL **到代碼中的查詢字符串部分。 – Dalorzo

+0

你能舉個例子說明這會是怎樣的嗎? :) – perkes456

回答

1

在asp.net,託管的IIS平臺上 -

  1. 安裝URL Rewrite模塊到IIS
  2. 添加此到站點

    <rewrite> 
        <rules> 
         <rule name="rewrite" stopProcessing="true"> 
          <match url="productdetails.aspx" /> 
          <conditions> 
          <add input="{QUERY_STRING}" pattern="id=([a-zA-Z0-9=]+)" /> 
          </conditions> 
          <action type="Rewrite" url="/Details/{C:1}" appendQueryString="false" /> 
         </rule> 
        </rules> 
    </rewrite> 
    
的web.config中( system.webServer)部

然後對/productdetails.aspx?id=zdpMPZVXkDtjw92Crx7eew==的每個請求將被重寫爲http://localhost:51392/Details/zdpMPZVXkDtjw92Crx7eew==。但是重寫並不意味着用戶在瀏覽器中會改變,只是服務器上的目的地。

但是,如果你想重定向它,改變了規則:

<rule name="redirect" stopProcessing="true"> 
    <match url="productdetails.aspx" /> 
    <conditions> 
    <add input="{QUERY_STRING}" pattern="id=([a-zA-Z0-9=]+)" /> 
    </conditions> 
    <action type="Redirect" url="/Details/{C:1}" redirectType="Permanent" appendQueryString="false" /> 
</rule> 

這會是一個permenent 301重定向,以Permanent做一個臨時的307重定向改變Temporary的操作類型。

請參閱Redirect vs Rewrite以瞭解有關兩者之間差異的更多信息。


隨着重定向規則我給:

用戶輸入/productdetails.aspx?id=zdpMPZVXkDtjw92Crx7eew==他們 被重定向到/Details/zdpMPZVXkDtjw92Crx7eew==和URL 必須能夠處理請求的。在將網站移動到新的平臺/ URL結構時,使用這種情景典型地爲 。

爲了做相反,與所述用戶輸入/Details/zdpMPZVXkDtjw92Crx7eew==和站點處理上/productdetails.aspx?id=zdpMPZVXkDtjw92Crx7eew==利用請求:

<rule name="rewrite"> 
    <match url="Details/([a-zA-Z0-9=]+)" /> 
    <action type="Rewrite" url="/productdetails.aspx?id={R:1}" /> 
</rule> 

Example on GitHub)中的global.asax

+0

」但是重寫並不意味着用戶在瀏覽器中會改變,只是服務器上的目標。「但我的問題的重點是要在用戶瀏覽器中重寫URL:/ – perkes456

+0

然後您想要重定向它:-)使用第二條規則。 – NikolaiDante

+0

添加了重寫與重定向鏈接,查看該博客文章頂部的表格,其中概述了兩者之間的區別。 – NikolaiDante

0

void RegisterRoutes(RouteCollection routes) 
    { 
     routes.MapPageRoute("Products","Products/{id}/{productname}", 
          "~/productdetails.aspx"); 
} 

in products.aspx

<ahref='<%#string.Format("/Products/{0}/{1}",Eval("id"),Clean.CleanUrl(Eval("ProductName").ToString())) %>'><%# Eval("ProductName") %></a> 
在productsdetails.aspx.cs

if (!IsPostBack) 
     { 
      if (RouteData.Values["id"] != null) 
      { 
       loadproduct(); 

      } 
} 

void loadproduct() 
{ 
select ............. where id= RouteData.Values["id"].ToString(); 
} 

這是清潔類

public static class Clean 
    { 
     public static string CleanURL(this string kelime) 
     { 
      if (kelime == "" || kelime == null) { return ""; } 
      kelime = kelime.Replace("ş", "s"); 
      kelime = kelime.Replace("Ş", "S"); 
      kelime = kelime.Replace(".", ""); 
      kelime = kelime.Replace(":", ""); 
      kelime = kelime.Replace(";", ""); 
      kelime = kelime.Replace(",", ""); 
      kelime = kelime.Replace(" ", "-"); 
      kelime = kelime.Replace("!", ""); 
      kelime = kelime.Replace("(", ""); 
      kelime = kelime.Replace(")", ""); 
      kelime = kelime.Replace("'", ""); 
      kelime = kelime.Replace("ğ", "g"); 
      kelime = kelime.Replace("Ğ", "G"); 
      kelime = kelime.Replace("ı", "i"); 
      kelime = kelime.Replace("I", "i"); 
      kelime = kelime.Replace("ç", "c"); 
      kelime = kelime.Replace("ç", "C"); 
      kelime = kelime.Replace("ö", "o"); 
      kelime = kelime.Replace("Ö", "O"); 
      kelime = kelime.Replace("ü", "u"); 
      kelime = kelime.Replace("Ü", "U"); 
      kelime = kelime.Replace("`", ""); 
      kelime = kelime.Replace("=", ""); 
      kelime = kelime.Replace("&", ""); 
      kelime = kelime.Replace("%", ""); 
      kelime = kelime.Replace("#", ""); 
      kelime = kelime.Replace("<", ""); 
      kelime = kelime.Replace(">", ""); 
      kelime = kelime.Replace("*", ""); 
      kelime = kelime.Replace("?", ""); 
      kelime = kelime.Replace("+", "-"); 
      kelime = kelime.Replace("\"", "-"); 
      kelime = kelime.Replace("»", "-"); 
      kelime = kelime.Replace("|", "-"); 
      kelime = kelime.Replace("^", ""); 
      return kelime; 
     } 
    } 
+0

它重寫URL,但是,答案不包括如何用查詢字符串重寫URL? – perkes456

0

在的global.asax.cs文件,試圖以這種方式添加代碼。

void Application_BeginRequest(object sender, EventArgs e) { 

    string fullpath = Request.Url.ToString(); 

    if (fullpath.Contains("/Details/zdpMPZVXkDtjw92Crx7eew==")) { 
     Context.RewritePath("/productdetails.aspx?id=zdpMPZVXkDtjw92Crx7eew=="); 
    } 
    } 

然後在Productdetails.aspx.cs文件中,您可以嘗試讀取Id。

Label1.Text = Request.QueryString["id"];