2012-02-11 28 views
0

我在ASP.NET 4应用程序中实现了URL映射,但是我的某些内容出现问题。网页表单中的Url映射 - 允许使用问号和连字符

我们的一些产品有一个连字符“ - ”或问号“?”在他们中。这不是一个选项。产品名称可能是“我的产品 - 对您有好处?”。

我们使用两种定制的方法,MakeUrlSeoReadyMakeUrlNonSeoReady。我们替换这样的空间:替换(“”,“ - ”),因为这是最适合搜索引擎优化的解决方案。但是,我们也需要使用问号和连字符来完成这项工作。

我们使用MakeUrlSeoReady/NonReady方法的原因是能够显示“真实”名称。

目前映射定义如下:

routes.MapPageRoute("Produkt visning", 
        "artikler/{Categoryname}/{SubCategoryname}/{ProductName}", 
        "~/SingleProduct.aspx"); 

所以,我做的是我取决于产品名称检索产品。我使用两种方法我已经创建:

public static string MakeUrlNonSeoReady(string text) 
    { 
     return text.ToLower(). 
      Replace("oe", "ø"). 
      Replace("aa", "å"). 
      Replace("ae", "æ"). 
      Replace("-", " "); 
    } 

    public static string MakeUrlSeoReady(string text) 
    { 
     return text.ToLower(). 
      Replace("ø", "oe"). 
      Replace("å", "aa"). 
      Replace("æ", "ae"). 
      Replace(" ", "-"); 
    } 

所以我用下面的字符串从我们的数据库中获得SingleProduct.aspx页:

string categoryName = HelperFunctions.MakeUrlNonSeoReady(Page.RouteData.Values["ProductName"]); 

但是这当然不行。所以,任何帮助真的很感激:-)

+0

一个 “?”在一个URL中指定一个查询字符串。你无法改变IIS处理分析请求的方式。 – 2012-02-11 15:55:51

回答

1

可以说是更干净和更简单的方法是使用一个独特的产品标识符是数字或字母数字,本机HTML编码,然后简单地把产品名称作为一个未使用的参数为搜索引擎优化或搜索目的。

MSDN RouteCollection.MapPageRoute Method (String, String, String, Boolean, RouteValueDictionary)

routes.MapPageRoute("Produkt visning", 
       "artikler/{Categoryname}/{SubCategoryname}/{ProductIdentifier}/{ProductName}", 
       "~/SingleProduct.aspx", false, new RouteValueDictionary 
    { { "ProductName ", string.Empty } }); 
+0

这可能吗?真棒!谢谢! – 2012-02-11 15:47:34

+0

其常见,我经常在MVC项目中使用相同的格式,特别是在非英文名称等情况下。 – Lloyd 2012-02-11 15:57:31

相关问题