C# で興味深い問題が発生し、一貫して xml ノードを選択しています。
私たちのサイトは、従来の ASP から ASP.NET にアップグレード中です。アップグレード中の訪問者のプロセスをよりスムーズにするために、404 リダイレクトを実装して、外部リンクやブックマークなどの場合に古い .asp ページを置き換える新しい .aspx に訪問者を誘導しました。
一部のリンクは .asp から .aspx に変更されましたが、一部は構造と名前が変更されているため、次のパターンに従う XML ファイルがあります。
<?xml version="1.0" encoding="utf-8" ?>
<links>
<link oldUrl="/jailpod/default.asp" newUrl="/about/construction/jailpod.aspx" />
<link oldURL="/boc/boards.asp" newUrl="/boc/boards/default.aspx" />
<link oldUrl="/maps.asp" newUrl="/maps/default.aspx" />
</links>
この XML ファイルは、C# コード ビハインドのカスタム 404 ページで使用されます。このコードは、XML ファイルで新しい URL を検索して置換 URL を探すプロセスを実行し、ページが単に .aspx に変更されたかどうかを確認し、最後に一致が見つからない場合は 404 ページに留まり、訪問者に知らせます。彼らは間違ったページを持っています。
C# コードは次のとおりです。
// Whether or not to display an additional message to the users
bool redirectVisitor = false;
string url = ExtractUrlFrom(Request.Url.ToString());
var doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.Load(Server.MapPath("~/inc/NewUrlDictionary.xml"));
XmlNode urlNode = doc.SelectSingleNode(
string.Format("/links/link[@oldUrl='{0}']", url));
// Check if the node existed or not
if (urlNode != null)
{
url = urlNode.Attributes["newUrl"].Value;
redirectVisitor = true;
}
else
{
....
}
}
これが問題です。
私が訪問したとき:
mysite/jailpod/default.asp
また
mysite/maps.asp
期待どおりにリダイレクトされます。
私が訪問したとき:
mysite/boc/boards.asp
XmlNode が見つからないため、404 ページはそれが存在しないことを示しています。ブレーク ポイントを使用して C# コードをステップ実行しましたが、検索対象の URL は正確に "/boc/boards.asp" であり、Visual Studio ローカル パネルを使用して XmlDocument オブジェクトの内容を確認したところ、実行されました。確かに、属性「/boc/boards.asp」を持つノードがあります
これは、その 1 つのノードだけの問題ではなく、(一見ランダムに) 他のノードでも発生します。
ここで私が間違っていることを誰かが知っていますか? これらの XML レコードをすべてデータベースに移行し、代わりにデータベースにクエリを実行することを検討しています。ただし、どこかでばかげた間違いを犯している場合を除きます。