在我的 Web 应用程序中,我有一个如下所示的路由:
routeCollection.MapRoute(
"AdfsMetadata", // name
"FederationMetadata/2007-06/FederationMetadata.xml", // url
new { controller = "AdfsController", action = "MetaData" }); // defaults
这条路线背后的想法是更好地与 Microsoft AD FS 服务器 (2.0+) 一起工作,此时您只需指定主机名即可查找 AD FS 元数据。使用 MVC3 一切正常。但是我们最近将项目升级到了 MVC4,现在对该 URL 的调用导致 404,错误页面上提到的处理程序是StaticFile
,物理路径是D:\path\to\my\project\FederationMetadata\2007-06\FederationMetadata.xml
. 我假设 MVC 或 ASP.NET “认为”它必须是对静态文件的请求并查找文件,但它不是文件。数据是动态生成的——这就是我将 URL 路由到控制器操作的原因。问题是,即使是 Phil Haack 的 Route Debugger 也不起作用。除了 IIS 试图访问不存在的物理文件之外,它只是一个 404,没有其他信息。
有人对此有解决方案吗?我只想将此 URL 路由到控制器操作。
PS:我不是 100%确定原因是升级到 MVC4,这只是一个猜测,因为错误发生在升级的大约同一时间,并且相同的路线适用于仍在使用 MVC3 的另一个项目。
编辑:
我有一个自定义ControllerFactory
需要完整的类名(AdfsController
而不是Adfs
),因此在这种情况下后缀Controller
是正确的。