如何在asp.net中根据页面名称而不是querystring更改内容

时间:2012-08-23 18:11:38

标签: c# asp.net iis

我有一个网站,我们正在使用ASP.NET 4.0,现在我们的产品内容就像这样管理

www.franko1.com/products.aspx?serie=2000

其中查询字符串 serie 是产品ID,因此将获取其值,然后从数据库中提取内容。

现在出于搜索引擎优化的原因,我们被要求更改网址,所以现在他们必须看起来像这样:

What the boss want                    | Current Urls
--------------------------------------------------------------------------------
www.franko1.com/Relief_Valves         | www.franko1.com/products.aspx?serie=2000
www.franko1.com/Inline_Flame_Arrester | www.franko1.com/products.aspx?serie=1000
www.franko1.com/Vent_Hatch            | www.franko1.com/products.aspx?serie=3000

依旧......

现在,我们正在使用一个母版页和products.aspx,正如我所说,我们采用querystring系列,我们根据其值显示内容,我不知道如何使用asp.net,我已阅读 ISAPI_Rewrite ,但我想知道是否有一种技术可以在不处理IIS服务器的情况下解决这个问题....

嗯,我不知道我是否清楚,很难解释,

2 个答案:

答案 0 :(得分:4)

没必要。你可以通过routing实现这个目标(这不仅仅适用于MVC)。

路由作为独立模块已经有一段时间了,但是使用ASP.Net 4.0,您现在可以像使用MVC一样轻松地使用WebForms路由。

您需要为Global.asax添加一些路由

public class Global : System.Web.HttpApplication
{

    protected void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes(RouteTable.Routes);
    }

    public static void RegisterRoutes(RouteCollection routeCollection)
    {
        routeCollection.MapPageRoute("Products", "Products/{Name}", "~/Products.aspx");
    }

}

然后您可以在页面中引用路线值,如下所示:

protected void Page_Load(object sender, EventArgs e)
{
    string prodName = Page.RouteData.Values["Name"].ToString();

    //Do lookup, etc...
}

您的网址最终会如下所示:

  

www.domain.com/products/Relief_Valves
  www.domain.com/products/Widgets
  www.domain.com/products/TrashCans

等。

美好而轻松......干净!

答案 1 :(得分:0)

网址重写仅仅是为了这个目的。问题是它实际上不适用于直接附加到根URL的变量内容。实际上,没有足够的URL路由信息可以将这些URL与其他URL分开。

你的老板会接受www.franko1.com/p/Relief_Valves吗?