2012-06-21 30 views
1

我建立一个网站,我想只有一个控制器,它看起来就像图像文件的请求,并且网址:我的路线包括,当我不指定控制器

\main-page\sub-page 

main-page控制器和sub-page而不是这个动作,它们只是数据库中的页面名称,我想在其中进行渲染。换句话说,有很多页面,我不想为每个页面都创建一个控制器。事实上,我只想要一个Home一个Index动作,看起来像这样的控制器:

Function Index(ByVal Page As String, ByVal SubPage As String) As ActionResult 

而且只有一个视图,它使用的参数动态加载的页面内容。

以下航线几乎作品:

routes.MapRoute(
     "Default", _ 
     "{page}/{subpage}", _ 
     New With {.controller = "Home", .action = "Index", .page = "Landing", .subpage = "Index"} 
    ) 

但问题是,它也捡的文件,例如,/images/somefile.jpg请求,因为该路由相匹配。

所以问题是:如何在没有错误地获取图像请求的情况下做到这一点,或者是否有完全不同的方式来支持我想要做的事情?

+1

如果这条路径上的文件,应在路由机制踢之前返回,这就是它是如何工作在默认情况下,所以我会某处寻找合适的方案其他。如果该路径中不存在文件,路由机制将只处理路径。 – LukLed

+0

现在你提到它,它看起来好像文件请求是针对不存在的文件的,但这也不好,因为那么,而不是在页面中获取缺少的图像,整个页面崩溃(因为应用程序看起来在不存在的页面的数据库)。另外,我确定浏览器会为返回404的图像做一些不同的事情,而不是返回一些ASP.NET错误的图像。所以我想下一个问题是:我该如何处理这个新问题? –

+0

route.IgnoreRoute()为静态资源路径可能是在这里的方式 – LukLed

回答

0

你能也许尝试忽略路线即

routes.IgnoreRoute("{*alljpg}", new {[email protected]".*\.jpg(/.*)?"}); 

这是基于这个article这可能是比这个简短的帖子更有帮助。

那么这不是一个完整的猜测。我有一个相关的问题与favicon造成额外的请求。下面的代码解决了这个问题,因此主要是声音

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); 
相关问题