我正在将文件堆栈控制添加到我的asp.net MVC web应用程序中。
我有一个在路由中被忽略的media.aspx页面
routes.IgnoreRoute("media.aspx");它成功地运行并提供了一个标准的webforms页面。
在添加filevistacontrol时,我似乎不能忽略该控件对其any服务的任何调用。
例如,下面的ignoreRoute似乎仍然会被MvcHandler拾取。
routes.IgnoreRoute("FileVistaControl/filevista.asmx/GetLanguageFile/");抛出的异常是:
'The RouteData must contain an item named 'controller' with a non-empty string value'提前谢谢。
发布于 2011-05-04 01:08:35
我使用这个(其他答案的组合)让它工作:
routes.IgnoreRoute("{directory}/{resource}.asmx/{*pathInfo}");发布于 2013-04-11 16:41:28
简短的回答:
routes.IgnoreRoute( "{*url}", new { url = @".*\.asmx(/.*)?" } );长长的答案:
如果您的服务可以位于路径的任何级别中,则这些选项都不适用于所有可能的.asmx服务
routes.IgnoreRoute("{resource}.asmx/{*pathInfo}");
routes.IgnoreRoute("{directory}/{resource}.asmx/{*pathInfo}");默认情况下,路由模式中的参数将匹配,直到它们找到斜杠。
如果参数以星形*开头,就像这些答案中的pathInfo一样,它将匹配所有内容,包括斜杠。
所以:
.asmx服务,因为{resource}不会匹配斜杠。(适用于像http://example.com/weather.asmx/forecast).asmx服务。{directory}将匹配路径的第一段,{resource}将服务的名称。(适用于像http://example.com/services/weather.asmx/forecast)这样的东西
都不适用于http://example.com/services/weather/weather.asmx/forecast)
解决方案是使用IgnoreRoute方法的另一个重载,该方法允许指定约束。使用这个解决方案,你可以使用一个简单的模式来匹配所有的url,像这样:{*url}。然后,您只需设置一个约束来检查此url是否指向.asmx服务。这个约束可以用如下所示的正则表达式表示:.*\.asmx(/.*)?。这个正则表达式匹配任何以.asmx结尾的字符串,后面可以跟一个斜杠和任意数量的字符。
所以,最终的答案是:
routes.IgnoreRoute( "{*url}", new { url = @".*\.asmx(/.*)?" } );发布于 2011-01-20 06:08:35
使用以下命令时会发生什么:
routes.IgnoreRoute("FileVistaControl/filevista.asmx");如果这不起作用,可以尝试使用ASP.NET路由调试器来帮助您:http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx
https://stackoverflow.com/questions/4675367
复制相似问题