0

4.0 バージョンでの asp.net Web フォーム ルーティングに関する 2 つの問題に取り組んでいます。

最初の問題は、ローカルサーバー上のパスと同じパスが他のプロジェクトで正常に機能し、ローカルサーバーでパスの問題が発生することです。

2 番目の問題は、実際のホスティング Web サーバーでルーティングが機能しないことです。

サンプルコード

グローバル.asx

public static void RegisterRoutes(RouteCollection routes)
{
    routes.Ignore("{*allaspx}", new { allaspx = @".*\.aspx(/.*)?" });
    routes.Ignore("{*allcss}", new { allcss = @".*\.css(/.*)?" });
    routes.Ignore("{*alljpg}", new { alljpg = @".*\.jpg(/.*)?" });
    routes.Ignore("{*alljpg}", new { alljpg = @".*\.png(/.*)?" });
    routes.Ignore("{*alljpg}", new { alljpg = @".*\.gif(/.*)?" });
    routes.Ignore("{*alljs}", new { alljs = @".*\.js(/.*)?" });
    routes.Add(new System.Web.Routing.Route("{resource}.css/{*pathInfo}", new System.Web.Routing.StopRoutingHandler()));
    routes.Add(new System.Web.Routing.Route("{resource}.js/{*pathInfo}", new System.Web.Routing.StopRoutingHandler()));

    // Page will Generate error if route for home page is take out then 
    // http://www.kashmirsouq.com without any page or quesry string wont work.

    routes.MapPageRoute(
         "HomeRoute",
         "",
         "~/Default.aspx"
     );


    ////For 
    routes.MapPageRoute("ParentCat", "buysell/{CatID}/{Title}", "~/buy-sell-in-kashmir.aspx", false,
         new RouteValueDictionary {
                    { "CatID", "0" },
                    { "Title", "Product-Category-not-found" }},
         new RouteValueDictionary {   
                    { "CatID", "^[0-9a-fA-Z-]{36}$" }
                }); 
}

ParentCategoryListing.ascx & .cs ファイル コード

            <asp:Repeater ID="rptParentCategoryListing" runat="server">
                <ItemTemplate>
                    <li><a href='<%#getURLRouting(Eval("parentGUID"),Eval("CatName")) %>' title='<%#  Eval("CatLinkTitle")%>'>
                        <%#  Eval("CatName")%></a> </li>
                </ItemTemplate>
            </asp:Repeater>




protected string getURLRouting(object CatID, object CatTitle)
{
    string strTitle = CatTitle.ToString();

    #region Generate SEO Friendly URL based on Title
    //Trim Start and End Spaces.
    strTitle = strTitle.Trim();
    //Trim "-" Hyphen
    strTitle = strTitle.Trim('-');
    strTitle = strTitle.ToLower();
    char[] chars = @"$%#@!*?;:~`+=()[]{}|\'<>,/^&"".".ToCharArray();

    //Replace . with - hyphen
    strTitle = strTitle.Replace(".", "-");
    //Replace Special-Characters
    for (int i = 0; i < chars.Length; i++)
    {
        string strChar = chars.GetValue(i).ToString();
        if (strTitle.Contains(strChar))
        {
            strTitle = strTitle.Replace(strChar, string.Empty);
        }
    }
    //Replace all spaces with one "-" hyphen
    strTitle = strTitle.Replace(" ", "-");
    //Replace multiple "-" hyphen with single "-" hyphen.
    strTitle = strTitle.Replace("--", "-");
    strTitle = strTitle.Replace("---", "-");
    strTitle = strTitle.Replace("----", "-");
    strTitle = strTitle.Replace("-----", "-");
    strTitle = strTitle.Replace("----", "-");
    strTitle = strTitle.Replace("---", "-");
    strTitle = strTitle.Replace("--", "-");
    //Run the code again...
    //Trim Start and End Spaces.
    strTitle = strTitle.Trim();
    //Trim "-" Hyphen
    strTitle = strTitle.Trim('-');
    #endregion
    string url = null;
    try
    {
       // url = "~/news/" + NewsID + "/" + pageid + "/" + strTitle; // +"&pgName=" + PageName;
        url = "~/buysell/"+CatID + "/" + strTitle;
     //   return url;
    }
    catch (Exception ex)
    {
        Response.Redirect("Error");
    }
    return url;
}

buy-sell-in-kashmir.aspx ファイルの部分コード

protected void Page_Load(object sender, EventArgs e)
{
    if (string.IsNullOrEmpty(Request["CatID"]))
    {
        sPID = RouteData.Values["CatID"].ToString();
        bIsGUID = IsGuid(sPID, out PID);
        addCanonicalURL = false;
    }
    else
    {
        sPID = Helper.GetQueryStringValue("CatID").ToString(); ;
        bIsGUID = IsGuid(sPID, out PID);
        addCanonicalURL = true;
    }


  // Code to get details based on sPID ParentCategory GUID

}

出力

default.aspx ページの Current UserControl を使用して、親カテゴリの次のリンクを生成します。

http://localhost:59030/TravelKashir-Souq/~/buysell/1ef4f9db-14d1-4ff0-be79-922ce903bff4/electronics-technology

上記のサンプルリンクでは~/、ユーザー制御関数のようにパスを使用すると追加されますgetURLRouting

url = "~/buysell/"+CatID + "/" + strTitle;

パスを次のように使用する場合

url = "buysell/"+CatID + "/" + strTitle;次に、親カテゴリの変更へのリンク

http://localhost:59030/TravelKashir-Souq/buysell/1ef4f9db-14d1-4ff0-be79-922ce903bff4/electronics-technology

default.aspxページでルーティングが正常に機能し、クリックするとbuy-sell-in-kashmir.aspxページに移動します

http://localhost:59030/TravelKashir-Souq/buysell/1ef4f9db-14d1-4ff0-be79-922ce903bff4/buysell/1ef4f9db-14d1-4ff0-be79-922ce903bff4/electronics-technology

別のパスを試しても正しく動作せず、共有ホスティングにコードをアップロードすると動作せず、エラーが発生します

HTTP Error 404.0 - Not Found The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

コードに記載されている同じパスを他のプロジェクトでも問題なく機能させることができるため、この問題に不満を感じています。

この点で助けていただければ幸いです。

私たちのルーティングを含むウェブサイトhttp://www.kashmirSouq.com & 動作しないルーティングバージョンhttp://demo2.kashmirsouq.com

構成: localhost と共有ホスティングの両方で IIS 7.5/asp.net 4.0

4

0 に答える 0