【问题标题】:Configuring IIS 7 & ASP.NET App for URL Routing为 URL 路由配置 IIS 7 和 ASP.NET 应用程序
【发布时间】:2010-02-09 03:44:56
【问题描述】:

这不是 MVC 主题。 我有一个 ASP.NET 应用程序,它在 Application_Start 方法中执行 URL 路由。

路由看起来像:

RouteTable.Routes.Add(new Route(
  "Profile/{query}",
  new RouteValueDictionary() { {"query",string.Empty} },
  new GenericRouteHandler("~/ProfileHttpHandler.ashx")
));

GenericRouteHandler 看起来实现了 GetHttpHandler 与:

var page= (IHttpHandler)BuildManager.CreateInstanceFromVirtualPath(_virtualPath, typeof(IHttpHandler));
...
return page;

而 ProfileHttpHandler.ashx 只是一个 Visual Studio 模板。它将 Content-type 设置为“text/plain”并写入“hello world”。

在 Visual Studio(在 ASP.NET 开发服务器上)中调试时,此应用程序可以正常工作。 GET http://localhost:59474/Profile/abc123 按预期路由到 http 处理程序。

但是,当此应用发布到以集成管道模式运行 IIS 7 的远程计算机时,该过程将失败。尝试获取应用程序文件夹中的任何内容时出现 HTTP 500 错误,包括 Default.aspx。

Web.Config 是这样配置的:

<system.web>
  <httpModules>
    <add name="RoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </httpModules>
</system.web>
<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <add name="RoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  </modules>
</system.webServer>

最后;我不确定这是否是相关信息。在我的 Web 服务提供商的控制面板中,我将此应用程序所在的目录配置为虚拟目录。 它具有以下属性:

  • mydomain.ca/routeapp:您的托管空间中的文件夹 (domain.ca\wwwroot\routeapp)
  • 允许匿名访问:开启。
  • 启用集成 Windows 身份验证:打开。
  • 启用基本身份验证:打开。
  • ASP:已禁用。
  • ASP.NET:2.0 集成管道。
  • PHP:已禁用。
  • Perl:已启用。

【问题讨论】:

  • 您能从服务器上的事件日志中找出 500 错误是什么吗?
  • 我正在与我的提供商合作以尝试获取一些日志。文件系统上最新的日志文件被锁定,我似乎无法访问它。我已经验证 500 错误是对 OP 中描述的应用程序的直接响应。将新的 Web 应用程序发布到虚拟目录让我获得 HTTP 200s。
  • 你好。不幸的是,日志文件没有包含足够有用的信息。
  • 你可以尝试切换到经典管道模式看看它是否有效吗?
  • 经典模式下也不行。我将其更改为集成以直接响应我遇到的错误。

标签: asp.net asp.net-mvc iis iis-7 url-routing


【解决方案1】:

您可以尝试将其添加到您的 web.config 文件中

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
</system.webServer>

有关此检查的更多信息,请查看iis forum thread

【讨论】:

  • 我没有将它包含在我的 OP 中,因为我不知道它是否相关。然而,它已经包含在我的 web.config 文件中了。
  • 看来我注定不会让路由与 WebForms 一起工作。我已经将我的项目移植到 MVC 并且遇到的麻烦要少得多。以关闭此线程的名义,我将其指定为已接受的答案。
【解决方案2】:

若要为路由配置 ASP.NET 网站或 Web 应用程序,首先需要添加对 System.Web.Routing 程序集的引用。.NET Framework 3.5 的 SP1 安装会将这个程序集安装到全局程序集中缓存,您可以在标准的“添加引用”对话框中找到该程序集。

查看this link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 2019-05-30
    • 2018-08-07
    • 2012-10-10
    • 2010-10-02
    • 1970-01-01
    相关资源
    最近更新 更多