2012-02-11 18 views
0

ASP.NET 4アプリケーションでURLマッピングを実装しましたが、一部のコンテンツに問題があります。WebフォームでのUrlマッピング - 疑問符とハイフンを許可する

一部の製品にハイフン「 - 」または疑問符「?」があります。それらの中に。それを削除するオプションではありません。商品名は「マイプロダクト - お好きですか?」とすることができます。

我々は2つのカスタムメイドの方法、MakeUrlSeoReadyMakeUrlNonSeoReadyを使用しています。私たちはこのようなスペースを置き換えます:Replace( ""、 " - ")、これは最もSEOに優しいソリューションです。しかし、疑問符とハイフンの両方でこの作業を行う必要もあります。

私たちが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"]); 

しかし、もちろん、この意志が動作しない私は、私が作成した2つのメソッドを使用します。

+0

A "?" URLにはクエリ文字列を指定します。 IISが要求の解析方法を変更することはできません。 –

答えて

1

間違いなくクリーンでシンプルな方法は、数字または英数字でネイティブにHTMLでエンコードされた固有の商品IDを使用し、単に商品名をSEO用の未使用パラメータとして使用することですまたは検索目的に使用できます。

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

これは可能ですか?驚くばかり!ありがとう! –

+0

一般的に、私はMVCプロジェクトで頻繁に同じ形式を使用します。特に英語以外の名前がある場合など – Lloyd