首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UrlRewriting.Net模块+ IIS7等于Page.User == null?

UrlRewriting.Net模块+ IIS7等于Page.User == null?
EN

Stack Overflow用户
提问于 2010-01-08 03:56:04
回答 3查看 4.1K关注 0票数 5

我已经使用UrlRewriting.Net模块几年了,在Windows和Windows2003中没有任何问题。我最近刚把家里的PC升级到Windows 7,并开始开发一个新的网站。

计划是使用.html扩展,并使用.aspx模块将它们重写给对应的UrlRewriting.Net。所有在VWD 2008中都能完美地工作,但当我尝试通过IIS7运行它时,情况就不同了。

当我试图通过.html重写访问一个页面时,我不能再访问Page.User;它一直返回null。如果我使用它的.aspx扩展点击页面,Page.User就会被正确填充。我还应该提到,我的母版页中有一个LoginView控制器,它也有同样的症状:通过.html扩展访问时,它显示了AnonyousTemplate;在使用.aspx扩展时,它正确地显示了LoggedInTemplate。我猜这两者是有关联的。

注意:我也尝试过无扩展URL,它们显示了同样的问题

让它工作的唯一方法是将应用程序池切换到Classic,然后需要我为.html扩展添加一个.html ddl处理程序,否则它将由StaticFileHandler处理,并出现404错误。不过,我希望我的web应用程序能够为人们正常运行,而不必摆弄IIS。

因此,我只剩下几个问题:

  • 对于为什么Page.User总是等于.html => .aspx重写页面的null,有人有想法吗?
  • 为什么它在2008年VWD中有效,而在IIS7中却不起作用?
  • 与IIS6 => IIS7不同的是,究竟是什么原因造成了这种情况呢?
  • 关于解决办法还有其他的想法吗?

注意:我刚刚尝试了一个.aspx => .aspx重写,但它没有显示出问题。不完全是我想要的,但我想我应该提一下。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-08 15:53:46

UrlRewriting.Net模块刚刚有了突破。这使得它在IIS7中以集成模式工作:

<modules runAllManagedModulesForAllRequests="true">

在找到它之后,我对"runAllManagedModulesForAllRequests“进行了搜索,首先弹出的是斯科特·格思里的博客,它实际上讨论了为此目的使用它。

票数 11
EN

Stack Overflow用户

发布于 2010-05-15 21:23:32

另一种似乎有效的方法是删除会话模块并读取它,保留“只对ASP.NET应用程序或托管处理程序的请求调用”复选框。在web.config文件中如下所示:

代码语言:javascript
复制
<system.webServer>
  <modules>
    <remove name="Session" />
    <add name="SessionManualAdd" type="System.Web.SessionState.SessionStateModule, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </modules>
</system.webServer>

问题似乎在于,当使用*.htm时,会话模块不执行“HttpContext.RewritePath”文件,但是以这种方式删除和读取该模块会导致对请求执行会话处理程序。

这个解决方案是在下面的线程上提出的。不幸的是,微软没有完全解释这种行为背后的原因:

http://connect.microsoft.com/VisualStudio/feedback/details/357248/context-rewritepath-disables-session-module-in-iis7

票数 2
EN

Stack Overflow用户

发布于 2011-12-16 19:31:40

Microsoft在Service 1 for Win7和Windows 2008 R2:http://www.microsoft.com/download/en/details.aspx?id=5842中包含了解决此问题的方法(至少对于无扩展urls)

也可作为修补程序使用:http://support.microsoft.com/kb/980368

应用此修补程序之后,ASP.NET 4应用程序可以处理对无扩展URL的请求。因此,在执行处理程序之前运行的托管HttpModules将运行。在某些情况下,HttpModules可以返回无扩展URL的错误。例如,只为期望获得HttpModule请求而编写的.aspx现在可能会在试图访问HttpContext.Session属性时返回错误。

在应用SP1或修补程序之后,不需要进行web.config更改就可以使会话和表单用于重写到asp.net页面/处理程序/等的无扩展URL。

我不知道这是否修复了对静态文件扩展名(如.htm )的重写。我猜可能不是。我会尽量避免在生产环境中设置runAllManagedModulesForAllRequests="true“,因为它会在静态文件请求上增加不必要的开销。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2025398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档