根据 Asp.Net 团队提供的信息What not to do in Asp.net you should not use PreSendRequestHeadersin a Managed HttpModule。
PreSendRequestHeaders 和 PreSendRequestContext
建议:不要将这些事件与托管模块一起使用。
PreSendRequestHeaders 和 PreSendRequestContext 事件可与本机 IIS 模块一起使用,但不能与实现 IHttpModule 的托管模块一起使用。设置这些属性可能会导致异步请求出现问题。
这正是我在图像处理库中所做的中所做的,以确保随响应一起发送正确的 mime 类型。
推荐的替代方法是什么?
我正在将一个项目从 .net Web 应用程序迁移到 .Net 核心 Web API。
我在 IIS 集成模式下使用 HTTP 模块,它是 .net 框架类库。
因此,考虑按原样移植到我的新核心应用程序。
我将 web.config 粘贴到我的新核心应用程序并添加了对该 Http 模块的项目引用,然后它就开始工作了。
我的 BeginRequest 方法中有一些 Context.Response.Write,每当我调用我的 web api 时,我都可以看到这些行。
但是,我在这里有一些问题。
有人可以分享以上几点的一些意见。
谢谢。
任何人都知道如何在HttpModule中呈现一个aspx页面并将其流回浏览器?
我们有一个URLRewriting模块,它使用BeginRequest事件方法中的Response.Redirect来更改目标页面.
以下问题涵盖重定向和传输之间的差异,但不包括HTTP模块中的差异;
编辑: HttpContext.RewritePath也在模块中使用,所以我们似乎有三种技术可以从原始路径移动初始请求; 分别是Redirect,Transfer,RewritePath; 返回浏览器,返回HTTP管道的开始并继续处理新路径.
我有一个定义自定义httpmodule的web服务.我正在尝试将此Web服务启动到运行IIS7的生产服务器上,但只能使其在经典模式下运行.
我试过移动这一节
<system.web>
<httpModules>
<add name="BasicAuthenticationModule" type="MyProject.UserAuthenticator.UserNameAuthenticator" />
</httpModules>
...
Run Code Online (Sandbox Code Playgroud)
像这样的system.webserver部分:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="BasicAuthenticationModule" type="MyProject.UserAuthenticator.UserNameAuthenticator" />
</modules>
Run Code Online (Sandbox Code Playgroud)
当我尝试这个IE给我这个错误:
Config Error
Cannot add duplicate collection entry of type 'add' with unique key attribute 'name' set to
'BasicAuthenticationModule'
Run Code Online (Sandbox Code Playgroud)
我还尝试使用以下DOS命令自动迁移:
appcmd migrate config "mysite/"
Run Code Online (Sandbox Code Playgroud)
并收到此消息:
The module BasicAuthenticationModule with type "mytype" is already present in the application with a different type"", and was not migrated
Run Code Online (Sandbox Code Playgroud)
我不是IIS专家,所以任何见解都表示赞赏.
因此,经过一些研究后,似乎已经存在一个名为BasicAuthenticationModule的本机模块.我可以通过重命名我的模块"BasicCustomAuthenticationModule"来消除我的问题.这是正确的方法还是应该删除另一个?
谢谢!AFrieze
我想做UrlRewriting.为了做到这一点,我编写了一个HttpModule,它运行在AuthorizeRequestASP.NET Http Modules链中的事件上(在HttpHandler处理请求之前).
我写了一个抽象类作为实现IHttpModule接口的基本重写器:
public abstract class BaseModuleRewriter : IHttpModule {
public virtual void Init(HttpApplication app) {
// WARNING! This does not work with Windows authentication!
app.AuthorizeRequest += new ventHandler(this.BaseModuleRewriter_AuthorizeRequest);
}
public virtual void Dispose() { }
protected virtual void BaseModuleRewriter_AuthorizeRequest(object sender, EventArgs e) {
HttpApplication app = (HttpApplication)sender;
this.Rewrite(app.Request.Path, app);
}
protected abstract void Rewrite(string requestedPath, HttpApplication app);
}
Run Code Online (Sandbox Code Playgroud)
该模块的真正实现是以下类:
public class ModuleRewriter : BaseModuleRewriter {
protected override void Rewrite(string requestedPath, System.Web.HttpApplication app) { …Run Code Online (Sandbox Code Playgroud) 让我留下来为我的应用程序的单个用户存储内容:
这些文件可能是这样的:
最终用户应该看到一个"友好"的网址.
http:// domain.com/files/{GUID}/bunny.jpg
该URL必须以某种方式通过控制器或httpmodule或thingIdontknow才能被授权查看该文件.这些权限可能每天都在变化,因此需要经常检查文件的权限.
从我读过的内容来看,这完全是可能的,但我不确定接下来要编码什么,或者有人在这里有任何见解.HttpModule还是Controller?我很困惑需要发生什么.
asp.net-mvc mvcroutehandler httpmodule asp.net-mvc-routing asp.net-mvc-3
我有一个ASP.NET WebApi服务,需要http基本身份验证(这是为了演示,而不是生产,所以这是基本身份验证的原因,而不是更安全的东西).Visual Studio IIS Express服务器运行良好,并通过自定义HTTP模块进行身份验证.
当我将站点部署到托管服务器时,它会失败并继续弹出登录屏幕.我向Fiddler验证了正在发送请求并且正在发送凭据.但它继续响应401未经授权的响应.似乎请求凭据在从客户端到服务器的时间内以某种方式丢失.我花了很多时间来尝试诊断这一点,使用Web API和IIS进行.NET身份验证似乎非常混乱.请帮忙!!
来自Fiddler的传出请求显示:
获取mywebsiteaddress HTTP/1.1
主机:我的网站地址
User-Agent:Mozilla/5.0(Windows NT 6.1; WOW64; rv:21.0)Gecko/20100101 Firefox/21.0
接受:/
Accept-Language:en-US,en; q = 0.5
Accept-Encoding:gzip,deflate
授权:基本YmJvbm5ldDE4Om9jdG9iZXIxNw ==
X-Requested-With:XMLHttpRequest
Referer:mysite
连接:keep-alive
以下是我的配置的相关部分(如果需要,我可以发布更多):
<modules>
<add name="BasicAuthHttpModule" type="ITMService.Modules.BasicAuthHttpModule"/>
</modules>
<httpModules>
<add name="BasicAuthHttpModule" type="ITMService.Modules.BasicAuthHttpModule"/>
</httpModules>
<authentication mode="Windows"/>
Run Code Online (Sandbox Code Playgroud)
我的自定义http模块(在visual studio的测试中工作正常).这主要取自asp.net上的示例:
namespace ITMService.Modules
{
public class BasicAuthHttpModule : IHttpModule
{
private const string Realm = "www.mysite.net";
public void Init(HttpApplication context)
{
context.AuthenticateRequest += OnApplicationAuthenticateRequest;
context.EndRequest += OnApplicationEndRequest;
}
private static void SetPrincipal(IPrincipal principal) …Run Code Online (Sandbox Code Playgroud) 我们正在经历突发瞬间的CPU峰值.检查我们的Sitecore日志后,我注意到有很多日志条目"11:49:26正在初始化INFO HttpModule".据我所知,这应该仅在应用程序启动时初始化.这仍然在应用程序启动后出现.我对吗?如果是这样,这些模块可以在哪里第二次初始化?
我正在尝试在ASP.NET WebAPI项目中记录整个传入请求和传出响应.虽然我同意DelegatingHandler,但我的雇主坚持使用HttpModule.你怎么向她解释,为什么我们应该使用DelegatingHandler而不是HttpModule?还是我错了?
c# httpmodule asp.net-web-api asp.net-web-api2 delegatinghandler
httpmodule ×10
asp.net ×4
c# ×4
.net ×3
.net-core ×1
asp.net-mvc ×1
cpu-usage ×1
httphandler ×1
ihttpmodule ×1
iis ×1
iis-6 ×1
iis-7 ×1
module ×1
performance ×1
sitecore ×1