我有一个带有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
提前致谢, 鲍尔泰克
答案 0 :(得分:1)
在你的web.config中替换:
path="/Home/Files/*"
使用:
path="Home/Files/*"
原因是因为当您在IIS中托管应用程序时,会有一个虚拟目录名称,正确的路径为/MvcApplication1/Home/Files/*
而不是/Home/Files/*
。使用path
属性中的相对网址即可轻松解决此问题。