我想自动生成cache.manifest文件。因此,我创建了一个控制器和一个可通过/离线支持/清单访问的操作。一切正常。内容已正确传递。
现在我想在调用 cache.manifest 时注册此操作。这就是我添加一条新路线的原因。我的注册路由方法如下所示:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional}
);
routes.MapRoute("cache.manifest", "cache.manifest", new { controller = "OfflineSupport", action = "Manifest" });
}
我的网站在本地主机:7365/下运行。当我调用 localhost:7365/cache.inventory 时,我得到一个 404.0,其中包含以下详细信息:模块:IIS Web Core,消息:MapRequestHandler,处理程序:静态文件,错误代码:0x80070002。
并且永远不会调用该操作。有什么建议可以更改什么以获得正确的路由吗?
可以修改 web.config 以包含:
<modules runAllManagedModulesForAllRequests="true"/>
这将允许路由和非查询字符串定义的(?
)参数中的句点。
定义的路由顺序也很重要。
尝试将自定义路由移动到默认路由声明上方。
似乎句号是问题所在。每当我映射到包含句点的路由时 ASP.NET MVC 都会尝试查找物理文件。当我删除句点时,一切正常。所以似乎不可能做我想做的事情,我将在未来映射到没有句点的路线。