2012-04-16 34 views
5

Tôi đang cố định tuyến .aspx (trang webform) trong dự án asp.net mvc của tôi. Tôi đăng ký trang trong global.asax:Sau khi thêm MapPageRoute vào dự án asp.net mvc, trang web dừng lại để vào Bộ điều khiển Trang chủ

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

Vấn đề là, sau khi tôi thêm dòng thứ hai, trang web dừng nhập vào điều khiển Trang chủ của tôi (Index Action) và được chuyển hướng đến: http://localhost:37538/Reports/Tickets?action=Index&controller=Login%22 luôn rằng tôi chạy dự án.

Chi tiết dự án:

  • Asp.Net MVC 3
  • hình thức xác thực
  • Net 4,0

Obs: để tái tạo lỗi này, tạo một dự án MVC asp.net mới dưới dạng ứng dụng internet, sau khi tạo trang web Tickets biểu mẫu web bên trong thư mục /WebForms/Reports và đăng ký tuyến đường mới. Chạy dự án (có thể bạn đã đăng nhập), vì vậy bây giờ đăng xuất và bạn sẽ được chuyển hướng đến http://localhost:35874/Reports/Tickets?action=LogOff&controller=Account, vậy tại sao?

Trả lời

10

Đã giải quyết! Vì vậy, chúng ta cần phải thêm một tuyến đường trái với tuyến đường webform để đảm bảo rằng nó chỉ bắt trên các tuyến đường đến, chứ không phải tạo ra các tuyến đường đi.

Thêm lớp sau vào dự án của bạn (hoặc trong một tập tin mới hoặc dưới cùng của global.asax.cs):

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

Sau đó thay đổi lộ trình Vé tham quan như sau:

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

Cảm ơn bạn! Điều này giải quyết vấn đề của tôi, nơi tôi không thể đăng nhập vào các trang của tôi nữa sau khi thêm MapPageRoute. Nút gửi trên trang Đăng nhập thực sự đã đăng các giá trị lên tuyến đường trang đầu tiên. Bạn có bất kỳ nguồn nào mô tả hành vi này và lý do đằng sau nó? –

+1

Đây là một số liên kết giúp tôi tiếp cận giải pháp: http://dotnet.dzone.com/news/custom-route-constraint-aspnet, http://blogs.imeta.co.uk/MBest/archive/2010/ 01/06.aspx và http://www.eworldui.net/blog/post/2008/04/ASPNET-MVC---Legacy-Url-Routing.aspx –

+0

Nhưng đặc biệt về bạn muốn, tôi không có. –

Các vấn đề liên quan