C# 在不引发会话\u启动事件的情况下执行控制器方法

C# 在不引发会话\u启动事件的情况下执行控制器方法,c#,asp.net-mvc,C#,Asp.net Mvc,我在Session\u Start中有一些逻辑,除了一个特殊的方法外,这个逻辑对于我的所有控制器方法都是实际的。当用户转到特殊方法URL时,我不需要执行Session\u start逻辑 有什么办法吗?据我所知,如果请求特殊url,您不希望调用会话启动方法中的代码。我想知道你想要解决的问题是什么会有帮助的。现在我的答案是: 由于会话启动只调用一次(至少通常情况下,取决于会话模块的配置-请参阅我对您的问题的评论),因此只有在客户端首先调用“特殊”url(例如,在调用其他url之前)时,这才有效。如

我在
Session\u Start
中有一些逻辑,除了一个特殊的方法外,这个逻辑对于我的所有控制器方法都是实际的。当用户转到特殊方法URL时,我不需要执行
Session\u start
逻辑


有什么办法吗?

据我所知,如果请求特殊url,您不希望调用会话启动方法中的代码。我想知道你想要解决的问题是什么会有帮助的。现在我的答案是:

由于会话启动只调用一次(至少通常情况下,取决于会话模块的配置-请参阅我对您的问题的评论),因此只有在客户端首先调用“特殊”url(例如,在调用其他url之前)时,这才有效。如果首先调用了另一个url,则将根据您的代码初始化会话。重要提示:如上所述,根据您的配置,始终会有一个会话(但在这种特殊情况下,您不希望在会话_Start中执行自定义逻辑):

您可以使用当前的HttpRequest并对某些属性执行检查:

// this will (usually) only be called once, on the first request of the client
protected void Session_Start() {
        // perform your check here if this is the url you want to exclude
        if (HttpContext.Current.Request.Url.OriginalString.ToLowerInvariant().EndsWith("something")) {
            return;
        }

        // your initialization here that should not be executed for clients accessing the site using the above url
    }

如您所见,您可以访问请求对象,并在那里执行检查,具体取决于您的要求。

我不知道,如果我理解正确,您是否不希望在调用特殊控制器/url时执行例如您的global.asax中的Session_Start方法?我认为这是不可能的,因为会话启动将由“新”客户端的第一个请求调用(例如,没有现有会话)。它也可能取决于您的会话设置/模式(无cookieless…)是的,我想在调用特殊控制器方法时忽略会话启动逻辑?如果我无法避免在这个url上启动会话,可能是我可以从请求中检测url,并在主会话开始之前“返回”,也许以下链接可以帮助您:谢谢您的回答。我考虑过这个解决方案,但它需要一些黑客保护逻辑。如果我找不到更可靠的解决方案,我会采用这种方式。黑客保护?如果你有一个安全问题或一些重要的事情,我的回答是辩护地不是一个解决方案。为了帮忙,我需要更多的细节。。。