IIS 7.5中的无扩展URL的ASP MVC 2处理程序无法正常工作

时间:2012-07-17 16:39:16

标签: asp.net asp.net-mvc-2 iis-7.5 httphandler

我有一个带有HttpHandler的项目,该项目应该在请求像localhost/foo/bar这样的无扩展名网址时执行。我在本地Visual Studio开发服务器上正常工作(使用<httpHandlers>而不是<system.web>中的<system.webServer><handlers>)但是当部署到IIS 7.5时此功能不起作用(标准404错误) :http://i.imgur.com/YuNjT.jpg)。此问题不仅限于无扩展名的URL(我可能会在末尾添加任何扩展名,问题仍然存在)但我希望的功能是在此方案中使用无扩展名网址。我搜索了一些信息,无扩展的URL可能会导致一些问题,这就是我在这里提到它的原因。 AppPool设置为Integrated。我做了aspnet_regiis.exe -i。我在IIS服务器上安装了Http Redirection功能。这是我的处理程序配置:

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
        <add name="FileDownloadHandler" path="/Home/Files/*" verb="*" type="MvcApplication1.FileDownloadHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" />
    </handlers>
    <directoryBrowse enabled="true" />
</system.webServer>

这是我的路由设置:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("home/files/{*pathInfo}");

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

我猜测代码很好,但我的IIS配置有些不对劲。谁能引导我朝着正确的方向前进?我已经用Google搜索了几天,我找不到帮助我的解决方案。这是一个示例项目(适用于本地VS dev服务器但不适用于我的IIS): http://mapman.pl/MvcApplication1.zip

当你构建(并部署到本地IIS)时,上面的解决方案尝试请求这样的URL:http://localhost/MvcApplication1/Home/Files/foobar

提前致谢, 鲍尔泰克

1 个答案:

答案 0 :(得分:1)

在你的web.config中替换:

path="/Home/Files/*"

使用:

path="Home/Files/*"

原因是因为当您在IIS中托管应用程序时,会有一个虚拟目录名称,正确的路径为/MvcApplication1/Home/Files/*而不是/Home/Files/*。使用path属性中的相对网址即可轻松解决此问题。