ASP.Net 2.0でaxd管理リソースのいくつかの知識点


ASP.Net 2.0でaxd管理リソースのいくつかの知識点
 
ASP.Net 2.0で構築されたWebページでは、ソースファイルを表示すると、次のHtmlテキストがよく見られます.


これはASPです.Net 2.0が提供する新しいリソース管理方式によるスクリプト.
新しいリソース管理方法の使用方法については、次のブログを参照してください.
ASPを使用する.NET 2.0が提供するWebResource管理リソースhttp://birdshome.cnblogs.com/archive/2004/12/19/79309.html
カスタムServer ControlでJSファイルをバンドルするStep by Stephttp://www.cnblogs.com/jackielin/archive/2005/11/29/286570.html
ASPを使用する.NET 2.0のWebリソースhttp://support.microsoft.com/kb/910442
はい.NET 1.1で実現axdhttp://www.cnblogs.com/yeahooh/archive/2007/07/27/833846.html
 
WebResourceを使用してリソースを管理すると、次のような例外が頻繁に発生します.
System.Web.HttpException:無効なビューステータスです.System.Security.Cryptography.CryptographicException:入力が無効で削除できません.
例えば、次のいくつかの文章でこの問題に言及しました.
Annoying CryptographicException on WebResource.axdhttp://forums.asp.net/t/934913.aspx
ASP.Net’s WebResource.axd and machineKey badnesshttp://blog.aproductofsociety.org/?p=11
 
なぜならaxd URLのパラメータは時効性がありますが、検索エンジンの爬虫類では、これらのパラメータの期限切れのアドレスに頻繁にアクセスするため、上記の異常が発生します.
この問題の解決策は、現在より良い案はなく、マイクロソフトフォーラムではrobotsで提案されているだけです.txtファイルに次の情報を追加します.
User-agent: *Disallow:/*.axd$
しかし、この要求はrobotsに従う.txt仕様の爬虫類たちは次回最新のrobotsを獲得する.txtが機能します.robotsに従わない人にはtxt仕様の爬虫類ですが、少しも方法がありません.
 
私の今の考えはaxdは使わないでください.国内はrobotsに従わないからです.txt仕様の爬虫類が多すぎます.そのシーンを分析するためにWebResourceを使用する必要があります.axdのリソース、つまりWebResourceが必要です.axdのフォーマットを解析します.
 
WebResource.axdのURLのフォーマットは次のとおりです.
         WebResource.axd?d=encrypted識別子&T=タイムスタンプ値.次のようになります.
「d」は、Webリソースを要求することを表す.(encrypted identifier)「t」はtimestamp対プログラムセットであり、リソースに対する変更リクエストがすでに存在する場合の決定に役立ちます.
 
tパラメータは,誰がそれを使用するかを解析するのに意味がないので,以下でdパラメータを解析する.
 
dパラメータの解析コードは以下の通りである.
<%@ Page Language="C#" AutoEventWireup="true" %>
<script runat="server">
    public static string PageDecryptString(string input)
    {
        Type type = typeof(System.Web.UI.Page);
        object o = Activator.CreateInstance(type);
        System.Reflection.MethodInfo mi = type.GetMethod("DecryptString", 
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static,
null, new Type[] { typeof(string) }, null); object result = mi.Invoke(o, new object[] { input }); return result.ToString(); } protected void btn_Post_Click(object sender, EventArgs e) { this.l_Info.Text = PageDecryptString(HttpUtility.UrlDecode(tb_WebResourceDValue.Text)); } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <body> <form id="form1" runat="server"> <asp:TextBox ID="tb_WebResourceDValue" runat="server" /><br /> <asp:Label ID="l_Info" runat="server" /><br /> <asp:Button ID="btn_Post" runat="server" Text=" " OnClick="btn_Post_Click" /> </form> </body> </html>

私たちはC:/Windows/Microsoftにいます.NET/Framework64/v2.0.50727/CONFIG/web.ファイルにはWebResourceが表示されます.axdファイルは、以下のHttpHandleによって解析されるように構成されています.

システムでWeb.Handlers.AssemblyResourceLoaderクラスでは、Reflectorツールを使用して、次のコードが表示されます.
 
void IHttpHandler.ProcessRequest(HttpContext context)
{
	// ...
	string str = context.Request.QueryString["d"];
	// ....
	string str2 = Page.DecryptString(str);
	// ...
}

明らかに、dのパラメータは、Pageを通過するべきです.DecryptString関数で解析した.
そしてPage.DecryptString関数では、Web構成で構成されているデフォルトの暗号化keyを呼び出します.簡単に言えば、ここでの解析方法はASP.Netページで実現しました.PageのせいでDecryptString関数はinternal staticで、上のコードで反射でこの関数を呼び出すと、私たちが望む値が得られます.
(復号アルゴリズムの復号キーが一致することを保証するために、最も簡単な方法は、上記の復号ASPXページを解析が必要なものと同じサーバに置くことです)
上のQfRKDnWw 93 T 08 KaF 3 ioSKQ 2の復号結果は:s|WebForms.js縦線は、文字列内の異なる値を区切るためにのみ使用されます.「s」は、このデータがスクリプトであることを示し、「WebForms.js」は取得するリソース名です.WebForms.jsリソースはSystem.Web.dll検索.
同理上の9 iVKU 5 SS 0 wd 5 al 1 SYg 8 zjL 8 XXbP 97 LbENHerY 4 aLtJk 1復号の結果は:s|WebUIValidation.js
明らかにこんなことが起こったらaxd呼び出しは、検証コントロールが呼び出しているはずです.
上のことを考えなければなりません

出てこないなら呼び出しをjs , WebUIValidation.jsスクリプトの検証コントロールは使用されません. 
 
参考資料:
グローバル化の準備:ASP.NET AJAXアプリ地球一周--MSDN Magazine,January 2008http://msdn.microsoft.com/msdnmag/issues/08/01/InternationalizingASPNETAJAX/default.aspx?loc=zh
Aspについて.Net 2.0におけるスクリプトリソースの検討(1)http://www.cnblogs.com/Truly/archive/2007/07/07/809576.html
Aspについて.Net 2.0におけるスクリプトリソースの検討(2)http://www.cnblogs.com/Truly/archive/2007/07/10/812707.html