Добавьте путь _vti_bin / Lists.asmx в веб-приложение ASP.NET MVC 2 - PullRequest
0 голосов
/ 22 апреля 2010

Я пытаюсь добавить путь / _ vti_bin / Lists.asmx к моему ASP.NET MVC 2 веб-приложению.

Я регистрирую маршрут следующим образом:

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 в мой проект в определенном месте (я не могу создать папку _vti_bin в проекте Visual Studio)?

Обновление: Ответ Дарина теперь позволяет http://localhost:8888/_vti_bin/Lists.asmx работать (единственное отличие - порядок определений маршрутов). Но теперь запрос страницы «О программе» на сайте проекта MVC 2 по умолчанию приводит к запросу http://localhost:8888/_vti_bin/Lists.asmx?action=About&controller=Home,, а не к домашнему контроллеру!

Очевидно, порядок, в котором определены маршруты, имеет значение.

1 Ответ

0 голосов
/ 22 апреля 2010

Это должно работать. Вот шаги, которые я сделал:

  1. Старт VS2010
  2. Создайте новый проект ASP.NET MVC 2, используя шаблон
  3. Измените 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);
        }
    }
    
  4. Запустите приложение и перейдите к http://localhost:1505/_vti_bin/Lists.asmx

  5. System.NotImplementedException: метод или операция не реализованы
...