2

C# ASP.NET Web アプリにいくつかの WebMethods があります。各リクエストを検証するために、それらすべての動作を変更したいと思います。以下のコードを想像してください。

[WebMethod]
public static void DoSomething() 
{
    if (ValidateRequest())
    {
        HttpContext.Current.Response.StatusCode = 400;
        // do some other stuff
        return;
    }
    // rest of method
}

もちろん、ValidateRequest() メソッド呼び出しは、Web メソッドの大部分に共通していることに気付きました。とにかく、すべての WebMethods が自動的に同じ動作をするようにこれを配線することはできますか? これを実現するために、メソッドに 2 番目の属性を追加できますか?

4

1 に答える 1

0

Global.asax ファイルの Begin Request に検証要求を追加します。

ここで、リクエストを検証する必要があるかどうかを確認するために、何らかのコードが必要です。

Webフォームでこれを行う方法がわかりません...しかし、私がすることは次のとおりです。

RequestPath プロパティを使用します (サービス URL と一致する場合は、メソッドとクラス名を取得します)

HttpContext.Current.Request.Path;

次に、メソッド属性を作成し、おそらくリフレクションを使用して、リクエストを検証する必要があるかどうかを確認します。(下のリンクを参照)

http://msdn.microsoft.com/en-us/library/z919e8tw.aspx

この時点から、この方法でメソッドに「[Validate]」属性をタグ付けするだけで、すべて機能するはずです。

 public class Global : HttpApplication
    {
        protected void Application_BeginRequest(object sender, EventArgs e)
        {
          if(ShouldValidate() && !IsValidRequest()){
              //add your custom error status here perhaps
              Response.StatusCode = 400
              Response.StatusDescription = "Something Bad happened"
              HttpContext.Current.Response.End()
          }
        }
于 2012-07-21T20:05:41.850 に答える