asp.net 为什么不能在Application_AcquireRequestState之前测试HttpContext.Current.Request是否为空?

kgsdhlau  于 2022-12-15  发布在  .NET
关注(0)|答案(1)|浏览(112)

根据微软的应用洞察力网站实现HttpContextExtensions.GetRequest,检查HttpContext中的HttpRequest是否为空并不是(总是?)可能的:
//在应用程序获取请求状态之前,HttpRequest在HttpContext中不可用
//但是没有办法检查它;仅捕获HttpException
为什么会这样?

public static HttpRequest GetRequest(this HttpContext context)
        {
            // HttpRequest is not available in HttContext till Application_AquireRequestState
            // But there is no way to check it; only catch HttpException
            HttpRequest result = null;
            try
            {
                result = context.Request;
            }
            catch (HttpException exp)
            {
                WebEventSource.Log.HttpRequestNotAvailable(exp.Message, exp.StackTrace);
            }

            return result;
        }

一个简单的合并器不是也能工作吗?

var request = HttpContext.Current?.Request;

难道我不能一起避免整个try-catchException吗?

1l5u6lss

1l5u6lss1#

  • 将 * coalesce用于httpcontext * 属性Current用于访问HttpContext.AddErrorHttpContext.ClearErrorHttpContext.AllErrors。使用属性AddError、AllErrors,我们可以创建自定义异常。*
try
                {
                    object ss = System.Web.HttpContext.Current ?? false;
                    if ((Boolean)ss)
                    {
                        //Some code....
                        //.......
                    }
                }
     catch (HttpException exp)
                {
                    WebEventSource.Log.HttpRequestNotAvailable(exp.Message, exp.StackTrace);
                }

相关问题