8

Global.asax ですべての例外をキャッチするコードがあります。

 protected void Application_Error(object sender, EventArgs e) 
        {
            System.Web.HttpContext context = HttpContext.Current;
            System.Exception exc = context.Server.GetLastError();
            var ip = context.Request.ServerVariables["REMOTE_ADDR"];
            var url = context.Request.Url.ToString();
            var msg = exc.Message.ToString();
            var stack = exc.StackTrace.ToString();
        }

このエラーが発生したコントローラー名を取得する方法

リクエストのクライアント IP を取得するにはどうすればよいですか?

また、例外をフィルタリングできますか? 404、504....エラーは必要ありません

ありがとう

4

3 に答える 3

6

Global.asax にはコントローラーとアクションの概念がないため、コントローラーとアクションの名前を取得するための API はないと思います。ただし、リクエスト URL の解決を試みることもできます。

HttpContextBase currentContext = new HttpContextWrapper(HttpContext.Current);
UrlHelper urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
RouteData routeData = urlHelper.RouteCollection.GetRouteData(currentContext);
string action = routeData.Values["action"] as string;
string controller = routeData.Values["controller"] as string;

ユーザー IP を取得するには、UserHostAddressプロパティを使用できます。

string userIP = HttpContext.Current.Request.UserHostAddress;

処理しない HTTP 例外を除外するには、次のようなものを使用できます。

HttpException httpException = exception as HttpException;
if (httpException != null)
{
    switch (httpException.GetHttpCode())
    {
        case 404:
        case 504:
            return;
    }
}

例外処理に関する最後の注意点 - よりローカルに実行する方法がある場合、グローバル レベルで実行することはベスト プラクティスではありません。たとえば、ASP.NET MVC 基本Controllerクラスにはメソッドがあります。

protected virtual void OnException(ExceptionContext filterContext)

これをオーバーライドすると、発生した例外を完全に制御できます。Global.asax で利用できるすべての情報に加えて、コントローラーへの参照、ビュー コンテキスト、ルート データなどの ASP.NET MVC 固有の機能を利用できます。

于 2012-09-26T07:15:41.843 に答える
3

私はこのように使用しました

このようにユーザーIPを取得できます

var userip = context.Request.UserAgent; 

このエラーが発生したURLを次のように取得できます

var ururl = System.Web.HttpContext.Current.Request.Url; 

私はこれがあなたを助けると思う...

于 2012-09-26T06:51:05.120 に答える
0

私は別の方法を取って、コントローラー (または、ベース コントローラーがある場合はベース コントローラー) に属性を使用します。

 public class HandleErrorAttributeCustom : HandleErrorAttribute
    {
       public override void OnException(ExceptionContext context)
        {
            //you can get controller by using
            context.Controller.GetType()

            //however, I'd recommend pluggin in Elmah here instead 
            //as it gives this easily and also can has filtering
            //options that you want

        }
}
于 2012-09-26T07:42:25.157 に答える