我正在尝试将路径 / _ vti_bin / Lists.asmx 添加到我的 ASP.NET MVC 2 Web应用程序中。
我正在注册路线如下:
routes.IgnoreRoute("{resource}.asmx/{*pathInfo}");
routes.Add(new Route("_vti_bin/Lists.asmx", new ListsHandler()));
其中ListHandler定义为:
public sealed class ListsHandler : IRouteHandler
{
#region IRouteHandler Members
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
throw new NotImplementedException();
}
#endregion
}
但是当我启动MVC应用程序并尝试导航到http://localhost:8888/_vti_bin/Lists.asmx时,我收到HTTP 404错误,而不是引发异常。
这在MVC中甚至可能吗?我是否需要在特定位置将Lists.asmx ASPX Web服务文件添加到我的项目中(我无法在Visual Studio项目中创建_vti_bin文件夹)?
更新:Darin的响应启用http://localhost:8888/_vti_bin/Lists.asmx现在可以正常工作(唯一的区别是路由定义的顺序)。但是现在,请求默认MVC 2项目站点的“关于”页面会向http://localhost:8888/_vti_bin/Lists.asmx?action=About&controller=Home发出请求,而不是请求家庭控制器!
显然,路线定义的顺序很重要。
答案 0 :(得分:0)
这应该有效。以下是我所做的步骤:
将Global.asax修改为如下所示:
public sealed class ListsHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
throw new NotImplementedException();
}
}
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new Route("_vti_bin/Lists.asmx", new ListsHandler()));
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
}
}