2016-02-04 265 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"];