LoginSignup
1
0

More than 5 years have passed since last update.

asp.netのtry~catchでハメられた話

Posted at

お題

asp.netのtry~catchでハメられた話

結論

try~catchも、ちゃんと設計しましょう。

環境

  • asp.netで作られた年代物のサイト
  • もちろんスパゲッティ
  • もちろん初期開発者・担当者は居ない
  • windows2008R2 
  • どこかのタイミングで、.net2.0系から、.net4.0系にアップしたみたい

状況

エラーでリダイレクトする場合に、発生エラーに応じて、適切なリダイレクトするようになっていたが、どうやら最近、ちゃんとリダイレクトされていないようだけど、どうなの?

調査開始

調査結果

ここで簡単に、ファイルを3つほど紹介(かなり簡略化しています。)
- main.asp.vb (メイン処理となるvb)
- check.vb (チェック処理を行うvb)
- db.vb (DBにアクセスして、データを取り出すvb)
どうやら、こいつらのリダイレクト処理が怪しい。

main.asp.vb
Class Main
    Protected Sub Page_Load() Handles Me.Load
        Try
            If 入力チェック処理() End
                KEY = Getパラメータ
                DB.データ取得処理()        
            End if
        Catch
            リダイレクト(例外エラー)
        End Try
    End Sub
End Class
check.vb
Public Class Chk
    Public Function 入力チェック処理()
        Try
            KEY = Getパラメータ
            return チェック処理の結果
        Catch
            リダイレクト(パラメータエラー)
        End try
    End Function
End Class
db.vb
Public Class DB
    Public Function データ取得(ByVal KEY As Integer)
        Try
            return KEYで取得したデータ
        Catch
            リダイレクト(DBエラー)
        End try
    End Function
End Class

予想

開発者は、
- KEYが想定外 -->> check.vbのtryに捕まって、リダイレクト(パラメータエラー)
- DBまわりで想定外 -->> db.vbのtryに捕まって、リダイレクト(DBエラー)
- それ以外の想定外 -->> main.asp.vbのtryに捕まって、リダイレクト(例外エラー)
のつもりで書いたのかと。

実際の挙動

全部、リダイレクト(例外エラー)

つまり、main.asp.vbから呼び出している関数内でエラーが発生した場合に、関数内のtryじゃなくて、呼び出し元のmain.asp.vbのtry~catchに捕まってしまっていたという訳。

対応

try~catchに関しては、放置!
というか、既存が凄すぎて、手が入れられない!

そのため、意図したエラーを、try~catchではなく、ちゃんと補足して、リダイレクトさせる用にしました。

本当は、他の方法もあったのかも知れないが、半ば放置されているようなサイトですがら、予算観点で・・・。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0