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