0

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 レコードをすべてデータベースに移行し、代わりにデータベースにクエリを実行することを検討しています。ただし、どこかでばかげた間違いを犯している場合を除きます。

4

2 に答える 2

4

Xml 属性では大文字と小文字が区別されます。2 番目の xml 要素に oldUrl の代わりに oldURL があります。

于 2013-11-26T22:26:16.333 に答える
2

ソース XML ドキュメントを見てください。問題があるものの oldUrl の属性は、他のエントリとは大文字と小文字が異なります。xpath は大文字と小文字を区別します。

于 2013-11-26T22:28:42.310 に答える