Как проложить страницу .aspx в проекте asp.net mvc 3?

У меня есть страница .aspx по следующему пути:

Areas/Management/Views/Ticket/Report.aspx

Я хочу перенаправить это на следующий путь в мой браузер:

http://localhost/Reports/Tickets

Как я могу это сделать?

Я пробую это:

routes.MapRoute(
    "Tickets", // Route name
    "Areas/Management/Views/Ticket/Report.aspx", // Original URL
    new { controller = "Reports", action = "Tickets" } // New URL 
);

Но я получил ошибку 404.

Что я делаю неправильно?

Обс: Я положил это перед маршрутом Default.

Ответ 1

Решено! Итак, нам нужно добавить трафик на трассу веб-форм, чтобы убедиться, что он ловит только входящие маршруты, а не исходящие маршруты.

Добавьте в свой проект следующий класс (либо в новом файле, либо в нижней части global.asax.cs):

public class MyCustomConstaint : IRouteConstraint{
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection){
        return routeDirection == RouteDirection.IncomingRequest;
    }
}

Затем измените маршрут Tickets на следующее:

routes.MapPageRoute(
    "Tickets",
    "Reports/Tickets",
    "~/WebForms/Reports/Tickets.aspx",
    true, null, 
    new RouteValueDictionary { { "outgoing", new MyCustomConstaint() } }
);

Ответ 2

Если вы пытаетесь использовать веб-формы в проекте MVC, я бы переместил ваш .aspx из папки представлений, так как это не совсем представление, поэтому что-то вроде WebForms/Tickets/Report.aspx.

В веб-формах вы сопоставляете маршрут, вызывая метод MapPageRoute.

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapPageRoute("Tickets", "Reports/Tickets", "~/WebForms/Tickets/Report.aspx");
routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });

Вам нужно будет установить это до маршрута MVC по умолчанию.

Ответ 3

вы делаете это наоборот. это сопоставляет ваш URL Areas/Management/Views/Ticket/Report.aspx с {controller = "Reports", action = "Tickets" }
что вам следует делать вместо этого установите URL-адрес как Reports/Tickets EDIT: вы можете создать routeHandler только для маршрутизации на эту страницу .aspx.. вот так.

public class ASPXRouteHandler : IRouteHandler 
{ 
   public IHttpHandler GetHttpHandler(RequestContext requestContext) 
   { 

     return BuildManager.CreateInstanceFromVirtualPath("~/Areas/Management/Views/Ticket/Report.aspx",  typeof(Page)) as Page; 
   } 
}

то u может добавить ur-маршрут в существующую таблицу маршрутов, используя

Route customRoute = new Route("Reports/Ticket",null, new ASPXRouteHandler()); 
      routes.Add(customRoute); 

Ответ 4

если вы оставите стандартную маршрутизацию при создании проекта asp.net

public class ReportsController : Controller
{
        public ActionResult Ticket()
        {
            return View();
        }        
}

это должно сделать трюк. Маршрутизация в asp.net mvc означает, что вы не ссылаетесь непосредственно на .aspx, а на Actions (methods), которые, в свою очередь, возвращают соответствующее представление (.aspx)