虚拟目录之间的 IIS7 重定向

发布于 2024-11-02 19:47:07 字数 547 浏览 0 评论 0 原文

在我们的 asp.net 应用程序中,我们有几个虚拟目录。在 IIS7 中,这些被称为“应用程序”,它们都具有相同的应用程序池,以经典管道模式运行。

  • www.webapp.com/example1
  • www.webapp.com/example2
  • 等。

它们都指向同一个物理目录,例如 C:\webapp。唯一的区别是它们都有一个底层虚拟目录,指向不同的 CSS 文件夹,该文件夹位于 C:\webapp\styles\ (例如 C:\webapp\styles\example1\base.css 等),

我们使用表单身份验证和内置成员资格提供程序。我们遇到的问题是:

当用户浏览 www.webapp.com/example1/page.aspx 并单击重定向到 www.webapp.com/example2/otherpage.aspx 的链接时,用户会被重定向到 www .webapp.com/example2/login.aspx。会话似乎已过期。

我们真的不知道在哪里寻找解决方案,非常感谢任何指点! 提前致谢! 斯泰因

in our asp.net app, we have several virtual directories. In IIS7, these are called "applications" and they all have the same application pool, running in classic pipeline mode.

  • www.webapp.com/example1
  • www.webapp.com/example2
  • etc.

They all point to the same physical directory, say C:\webapp. The only difference is they each have an underlying virtual dir that points to a different CSS folder, which is located in C:\webapp\styles\ (eg. C:\webapp\styles\example1\base.css, etc)

We use forms authentication and the built-in membership provider. The problem we have is this:

When a user is browsing www.webapp.com/example1/page.aspx and clicks on a link that redirects to www.webapp.com/example2/otherpage.aspx,the user is instead redirected to www.webapp.com/example2/login.aspx. It seems as if the session expired.

We don't really know where to look for a solution, any pointers are greatly appreciated!
Thanks in advance!
Stijn

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

国际总奸 2024-11-09 19:47:07

我们找到了解决方案,所以我想我应该与 SO 社区分享:

通过反射将 AppDomainAppId 设置为固定值(在本例中为 applicationName):

Globals.asax.cs:

    protected void Application_Start(object sender, EventArgs e)
    {
        // make sure all set the same AppDomainAppId
        FieldInfo runtimeInfo = typeof(HttpRuntime).GetField("_theRuntime", BindingFlags.Static | BindingFlags.NonPublic);
        if (runtimeInfo == null) return;
        HttpRuntime theRuntime = (HttpRuntime)runtimeInfo.GetValue(null);
        if (theRuntime == null) return;
        FieldInfo appNameInfo = typeof(HttpRuntime).GetField("_appDomainAppId", BindingFlags.Instance | BindingFlags.NonPublic);
        if (appNameInfo == null) return;
        var appName = (String)appNameInfo.GetValue(theRuntime);
        if (appName != "applicationName") appNameInfo.SetValue(theRuntime, "applicationName");
    }

We found the solution so I thought I'd share this with the SO community:

set AppDomainAppId to a fixed value (in this case applicationName) through reflection:

Globals.asax.cs:

    protected void Application_Start(object sender, EventArgs e)
    {
        // make sure all set the same AppDomainAppId
        FieldInfo runtimeInfo = typeof(HttpRuntime).GetField("_theRuntime", BindingFlags.Static | BindingFlags.NonPublic);
        if (runtimeInfo == null) return;
        HttpRuntime theRuntime = (HttpRuntime)runtimeInfo.GetValue(null);
        if (theRuntime == null) return;
        FieldInfo appNameInfo = typeof(HttpRuntime).GetField("_appDomainAppId", BindingFlags.Instance | BindingFlags.NonPublic);
        if (appNameInfo == null) return;
        var appName = (String)appNameInfo.GetValue(theRuntime);
        if (appName != "applicationName") appNameInfo.SetValue(theRuntime, "applicationName");
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文