这不是 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 的远程计算机时,该过程会失败。当尝试获取 apps 文件夹内的任何内容(包括 Default.aspx)时,我收到 HTTP 500 错误。
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:已启用。
最佳答案
您可以尝试将其添加到您的 web.config 文件中
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>
有关此内容的更多信息,请查看 iis forum thread .
关于asp.net - 配置 IIS 7 和 ASP.NET 应用程序进行 URL 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2226610/