GVKun编程网logo

asp.net – 使用HttpModules将事件附加到Session OnStart和OnEnd

16

针对asp.net–使用HttpModules将事件附加到SessionOnStart和OnEnd这个问题,本篇文章进行了详细的解答,同时本文还将给你拓展.NETHttpSessionState案例不

针对asp.net – 使用HttpModules将事件附加到Session OnStart和OnEnd这个问题,本篇文章进行了详细的解答,同时本文还将给你拓展.NET HttpSessionState案例不敏感、.net – 排除某些页面使用HTTPModule、Asp.Net MiddleWare与HttpModules、ASP.Net Session_Start事件未触发等相关知识,希望可以帮助到你。

本文目录一览:

asp.net – 使用HttpModules将事件附加到Session OnStart和OnEnd

asp.net – 使用HttpModules将事件附加到Session OnStart和OnEnd

有没有人知道使用HttpModule(不触及Global.asax文件)向Session的OnStart和OnEnd事件添加事件的简洁方法?

解决方法

public void Init(HttpApplication app)
{
   var ssm = app.Modules["Session"] as SessionStateModule;
   ssm.Start += Foo;
   ssm.End += Bar;
}

.NET HttpSessionState案例不敏感

.NET HttpSessionState案例不敏感

使用“InProc”存储的.NET的HttpSessionState似乎将会话变量键值视为不区分大小写。例如:
session["foo"] = 1;
session["Foo"] = 2;
Trace.Write(session["foo"].ToString()); // => 2

这个行为似乎没有文档,所以我想知道它是否只是底层会话存储机制的副作用,或者是由类本身有意实现的。
由于C#将所有其他内容都视为区分大小写,所以对于会话来说,这不是一样的。是什么赋予了?商店类型有差异吗?有没有与VB的向后兼容?

解决方法

HttpSessionState的密钥不区分大小写,以匹配经典ASP Session对象的行为。这使得开发人员更容易将ASP应用程序移植到ASP.NET中,而不会引入细微的区分大小写的问题。

QueryString,Cookies等对象和其他类似于Classic-ASP的内置对象都是相同的不区分大小写的关键字。

ASP.NET正在设计时,我正在微软的IIS团队工作,ASP.NET尽可能地将ASP.NET代码向后兼容到ASP。这并不意味着ASP.NET具有完美的向后兼容性,但每当一个决定出现(像这种区分大小写)时,默认的答案就是匹配经典ASP行为,除非有一个很好的理由。

也就是说,我同意会议的案例不敏感性可以更好地记录在案。

BTW,ASP.NET会话集合从NameObjectCollectionBase获取其案例行为,它是Cookie,会话状态,应用程序状态,标题等的所有ASP.NET内置对象的基类。从文档:

The underlying structure for this
class is a hash table.

Each element is a key/value pair.

The capacity of a
NameObjectCollectionBase is the number
of elements the
NameObjectCollectionBase can hold. As
elements are added to a
NameObjectCollectionBase,the capacity
is automatically increased as required
through reallocation.

The hash code provider dispenses hash
codes for keys in the
NameObjectCollectionBase instance. The
default hash code provider is the
CaseInsensitiveHashCodeProvider.

The comparer determines whether two
keys are equal. The default comparer
is the CaseInsensitiveComparer.

In .NET Framework version 1.0,this
class uses culture-sensitive string
comparisons. However,in .NET
Framework version 1.1 and later,this
class uses
CultureInfo..::.InvariantCulture when
comparing strings. For more
information about how culture affects
comparisons and sorting,see Comparing
and Sorting Data for a Specific
Culture Comparing and Sorting Data for
a Specific Cultureand Performing
Culture-Insensitive String Operations.

一个合理的后续问题是:为什么经典的ASP设计具有不区分大小写的键?这样做的原因是,在1996年(或周围),ASP使用的主要语言是VBScript,所以有意义的是满足对VB开发人员的不区分大小写的期望。

.net – 排除某些页面使用HTTPModule

.net – 排除某些页面使用HTTPModule

有没有办法排除某些网页使用HTTP模块?

我有一个使用自定义HTTP模块验证会话的应用程序. HTTPModule在Web配置中如此设置:

<system.web>
  <!-- ... -->
  <httpModules>
    <add name="SessionValidationModule"
       type="SessionValidationModule,SomeNamespace" />
  </httpModules>
</system.web>

要从页面中排除模块,我尝试这样做(没有成功):

<location path="ToBeExcluded">
  <system.web>
    <!-- ... -->
    <httpModules>
      <remove name="SessionValidationModule" />
    </httpModules>
  </system.web>
</location>

有什么想法吗?

解决方法

您可以使用HTTPHandler而不是HTTPModule.处理程序让您在Web.Config中声明路径时指定路径.
<add verb="*" path="/validate/*.aspx" type="Handler,Assembly"/>

如果您必须使用HTTPModule,您可以检查请求的路径,如果是要排除的路径,请绕过验证.

Asp.Net MiddleWare与HttpModules

Asp.Net MiddleWare与HttpModules

从Asp.Net 5开始,我们现在有了“中间件”概念来改变请求和响应或与之交互.所有这些都是在使用HttpModules之前完成的.

所以这是我的问题.

什么是asp.net中间件以及该组件解决了哪些问题无法通过HttpModules解决?

解决方法

HttpModules充当5之前的ASP.NET版本中的请求过滤器.它们是可重用的代码单元,可以插入到请求管道中,并负责响应HttpApplication类中触发的事件.

中间件可以被认为是我们在经典ASP.NET中拥有的HTTP模块和处理程序.一些中间件在处理诸如认证,会话状态检索和持久性,日志记录等请求时将实现各种中间任务.其中一些将是产生响应的最终请求处理程序.

问题2:这个组件解决了哪些问题无法通过HttpModules解决?

>在HttpModule中,您必须根据各种代码执行代码
请求的各个阶段,例如AuthenticateRequest,
AuthorizeRequest,PostResolveRequestCache等等
令人困惑的命名事件.中间件不再是这种情况,
事情现在才有意义.一切都只是线性执行
你的代码您可以定义多个中间件来执行
在您的申请中,每个人都在您的申请中明确注册
Startup.cs文件.
>作为开发人员,您可以完全控制执行内容的执行情况
什么顺序而不是不知道哪些HttpModules正在执行和
并没有真正控制他们的执行顺序.中间件可以
只需修改一个请求并继续调用下一个请求
链,或者它可以只是终止管道并返回结果.

Reference

ASP.Net Session_Start事件未触发

ASP.Net Session_Start事件未触发

我有一个ASP.Net 2.0应用程序,其中Session_Start事件没有在我的Global.asax文件中触发.任何人都可以告诉我们为什么会发生这种情况,以及如何使其发挥作用?

该应用程序在我的Windows XP开发机器上工作正常,但在部署到服务器(Win Server 2003 / IIS 6 / ASP.Net 2.0)时停止工作.

我不知道这是否相关,但服务器还承载SharePoint安装(WSS 3.0),我知道在默认网站级别会更改某些设置.

解决方法

在添加global.asax之前,该网站是否已预先编译?尝试重新编译它.

关于asp.net – 使用HttpModules将事件附加到Session OnStart和OnEnd的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于.NET HttpSessionState案例不敏感、.net – 排除某些页面使用HTTPModule、Asp.Net MiddleWare与HttpModules、ASP.Net Session_Start事件未触发的相关知识,请在本站寻找。

本文标签: