Responseの効率的な使用Redirect
7148 ワード
紹介:
ASPを評価しています.NET Webプロジェクトアプリケーション.拡張性の問題があります.Webサイトへのアクセスが増加するという意味です.システムは遅くなります.アプリケーションログを表示すると.大量のThreadAbortExceptionを見つけましたこの応用はResponse.Redirect(はいendResponse=true)を多く用いており,これが拡張性問題の根源である.endResponse=falseでResponse.Redirectはこの問題を解決します.しかし、このようにすると、アプリケーションに奇妙な問題が発生します.アプリケーションはResponseにあると仮定するからです.Redirectは現在のページで実行を停止します.それ以外に、アプリケーションがページイベントがリダイレクトを実行しないと仮定した後、セキュリティ上の危険性を処理する必要があります.この記事では、これらの問題を解決し、パフォーマンスを向上させるための簡単な方法について説明します.
説明:
例えば、Webフォームがあります.いくつかの条件を検証し、条件が一致しないときにユーザーにリダイレクトしてジャンプする必要があります.
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
この記事では、Responseの使い方を説明します.Redirect . 私もいくつかのリスク問題を発見しました.Responseを採用することができる.Redirectの最適化と技術はリスクを低減する.同じようにこの文章が好きになってほしい.
原文住所:using-response-redirect-effectively.aspx
ASPを評価しています.NET Webプロジェクトアプリケーション.拡張性の問題があります.Webサイトへのアクセスが増加するという意味です.システムは遅くなります.アプリケーションログを表示すると.大量のThreadAbortExceptionを見つけましたこの応用はResponse.Redirect(はいendResponse=true)を多く用いており,これが拡張性問題の根源である.endResponse=falseでResponse.Redirectはこの問題を解決します.しかし、このようにすると、アプリケーションに奇妙な問題が発生します.アプリケーションはResponseにあると仮定するからです.Redirectは現在のページで実行を停止します.それ以外に、アプリケーションがページイベントがリダイレクトを実行しないと仮定した後、セキュリティ上の危険性を処理する必要があります.この記事では、これらの問題を解決し、パフォーマンスを向上させるための簡単な方法について説明します.
説明:
例えば、Webフォームがあります.いくつかの条件を検証し、条件が一致しないときにユーザーにリダイレクトしてジャンプする必要があります.
1
2
3
4
5
6
7
8
9
10
11
12
protected
void
Page_Load(
object
sender, EventArgs e)
{
var condition = ......;
if
(!condition)
{
Response.Redirect(
"SomePage.aspx"
);
}
}
protected
void
btnSave_Click(
object
sender, EventArgs e)
{
// Save Data Here
}
これは良いですが、拡張性に影響します.スレッドプールが終了するからです.今は、Responseを使うだけです.Redirect(「Unauthorized.aspx」,false)はResponseを置換する.Redirect("Unauthorized.aspx") . これにより、スレッドが終了する問題が解決するが、現在のページのライフサイクルは停止しない.つまり、btnSaveを確保する必要があります.Clickイベント(および他のすべてのページ時間)btnSave_を許可する限りClickイベント実行は誰でも簡単にPOST要求を送信ことができる.この問題を解決するためにRedirectUser拡張を使用することをお勧めします.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public
static
class
HttpResponseExtensions
{
public
static
void
RedirectUser(
this
HttpResponse response,
string
url)
{
if
(response.IsRequestBeingRedirected)
return
;
response.Redirect(url,
false
);
var context = HttpContext.Current;
if
(context !=
null
)
{
context.ApplicationInstance.CompleteRequest();
}
}
}
public
partial
class
WebForm : System.Web.UI.Page
{
protected
void
Page_Load(
object
sender, EventArgs e)
{
var condition = .....;
if
(!condition)
{
Response.RedirectUser(
"Unauthorized.aspx"
);
}
}
protected
void
btnSave_Click(
object
sender, EventArgs e)
{
if
(Response.IsRequestBeingRedirected)
{
return
;
}
// Save Data Here
}
}
RedirectUserを使用する最初の利点は、アプリケーションの拡張性に優れたResponseを最初に使用することです.Redirect(with endResponse=false)メソッド.2つ目の利点は、このメソッドを複数回呼び出した後、以前のResponseを上書きしないことです.Redirect3つ目の利点は、ASPを処理するためにHttpApplication.CompleteRequestを呼び出すことである.NET実行時に通過する全てのイベント及びHTTPパイプ情報(ページライフサイクルパイプ情報ではない)をフィルタリングする.またbtnSaveではClickイベントでResponseをチェックする.IsRequestBeingRedirected.私もあなたがすべての内部統制をResponseに置くことを望んでいます.IsRequestBeingRedirectedチェック、1
2
3
4
5
6
7
8
<
form
id
=
"form1"
runat
=
"server"
>
<% if(!Response.IsRequestBeingRedirected){ %>
<
asp:Button
ID
=
"btnSave"
runat
=
"server"
Text
=
"Save"
OnClick
=
"btnSave_Click"
/>
<%--All the Other Controls--%>
<%--All the Other Controls--%>
<%--All the Other Controls--%>
<%} %>
</
form
>
もう1つ注意しなければならないことは、GridView、RadGrid、etcのような複雑な制御を使用すると、イベントを選択、挿入、更新、削除することができます.Response.IsRequestBeingRedirectedがtrueの場合、これらのイベントの操作(挿入、更新または削除)をキャンセルする必要があります.次の例です.1
2
3
4
5
6
7
8
protected
void
GridView1_RowEditing(
object
sender, GridViewEditEventArgs e)
{
if
(Response.IsRequestBeingRedirected)
{
e.Cancel =
true
;
return
;
}
}
まとめ:この記事では、Responseの使い方を説明します.Redirect . 私もいくつかのリスク問題を発見しました.Responseを採用することができる.Redirectの最適化と技術はリスクを低減する.同じようにこの文章が好きになってほしい.
原文住所:using-response-redirect-effectively.aspx