繁体   English   中英

根文件夹的asp.net处理程序

[英]asp.net handler for root folder

我正在使用VS 2010,.NET 4.0,ASP.NET Web应用程序项目。

我有自定义HttpHandler来处理* .aspx。 在根文件夹中,我有Default.aspx页面,它只用于捕获根文件夹访问权限并将请求重定向到其他.aspx页面,该请求由我的自定义处理程序进一步处理。

如果请求被定向到根文件夹,则将处理Default.aspx。 如果请求被发送到* .aspx(任何其他,然后Default.aspx)我的自定义处理程序将处理它。

我想从项目中删除Default.aspx页面,并仍然能够捕获对我的根应用程序文件夹的请求,并将请求重定向到我的自定义处理程序。

我试过在Global.asax中注册一个路由:

private void RegisterRoutes(RouteCollection routes)
    {
        routes.MapPageRoute("Default",
            "",
            "~/Default.aspx");
    }

那没用。

另外,我尝试在web.config处理程序中注册:

<add name="DefaultHandler" path="*" verb="*" type="App.DefaultHandler, App" />

但那也行不通。

更新:

实际上,在web.config path="*"中定义的处理程序确实有效,但它捕获了所有对服务器的请求,我认为这不是一个好习惯。

我创建了DefaultModule,在BeginRequest事件中我检查Request中的Path属性并假设它是对默认页面的请求。 到目前为止,这么好,但我不确定它是否适用于所有情况,这里是代码:

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(context_BeginRequest);
    }

    void context_BeginRequest(object sender, EventArgs e)
    {
        HttpRequest request = HttpContext.Current.Request;
        if (request.Path == "/")
        {
            HttpContext.Current.RewritePath("custom.aspx");
        }
    }

如果有人有任何更好的想法,我会很感激,谢谢。

更新:

我尝试过使用这个解决方案: https//stackoverflow.com/a/1913073/84852我以为Web服务器会请求Default.aspx然后我可以使用描述的处理程序捕获该请求,但应用程序只是通过“找不到文件”例外。

无论如何,我喜欢用HttpModule解决方案,如果没有其他解决方案,我将继续使用它。 我只是担心条件if (request.Path == "/") ,所以我把它改成了

if (context.Request.CurrentExecutionFilePath == context.Request.ApplicationPath)

以防万一。

新的想法仍然受欢迎。 谢谢。

更新:

使用HttpModule的解决方案不适用于IIS,但仅适用于VS开发服务器。 问题是当请求到达我的自定义HttpHandler(btw实现IRequiresSessionState)时,Session没有启动。

如果我理解你的问题,我相信你的道路应该是这样的:

<add name="DefaultHandler" path="*.aspx" verb="*" type="App.DefaultHandler, App" />

path = *将使其捕获所有请求,而* .aspx将限制它以.aspx扩展名请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM