为什么MapPageRoute / RedirectToRoute在开发机器上工作,而不是在生产服务器上?
本文关键字:服务器 工作 MapPageRoute RedirectToRoute 开发 为什么 机器 | 更新日期: 2023-09-27 18:14:24
我有一个常规的webforms项目(非mvc),我成功地实现了MapPageRoute和RedirectToRoute场景。页面路由是由数据库查找完成的,因为我正在转换查询字符串(例如?filter=112到/my-friendly-url)。它在运行VWD 2010 Express和包含的ASP的开发机器上运行得很好。. NET开发服务器。ASP。. NET版本为4.0.30319.272。但是,当我在生产(iis7)机器上运行该项目时,我在映射的页面上发现了未发现的错误。网站/页面的其余部分运行良好。我的直觉是,页面处理是问题的根源,但我不知道是什么,也不知道为什么。这可能与iis7如何处理目录和文件名有关,也可能与我的程序将物理.aspx路由到目录样式的名称时可能产生的干扰有关。我的愿望是7 & &;网络。配置知识在这方面有点薄弱。
这是我的global.asax的摘录:
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
RegisterRoutes(RouteTable.Routes);
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.Clear();
routes.RouteExistingFiles = false;
routes.Ignore("{resource}.axd/{*pathInfo}"); //ignore axd files, prevents javascript/routing collisions
routes.MapPageRoute("Education", "{category}/{section}", "~/product/education/default.aspx");
routes.MapPageRoute("EducationLanding", "{category}", "~/product/education/default.aspx");
}
网络。
的config: Handlers部分 <handlers>
<remove name="StaticFile" />
<remove name="PageHandlerFactory-Integrated-4.0" />
<add verb="*" path="ajax/*.ashx" name="Ajax" type="Ajax.PageHandlerFactory, Ajax" />
<add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add name="PageHandlerFactory-Integrated-4.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
</handlers>
提前感谢,约翰。
查看页面处理将我带到了web的模块部分。配置和我找到了我的答案在这里SO (IIS 7忽略MapPageRoute没有文件扩展名)。我不知道为什么我在以前的所有搜索中都没有找到这个。见:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
谢谢@Christoph
这一切都很好,但不要忘记服务器需要重新启动才能触发您的global.asax