2012-01-08 8 views
0

Что мне делать, если я хочу URL, как показано ниже (который не определен мной, так что я не могу изменить его):Маршрут по строке запроса

http://localhost/Something?cmd=Open&a=1&b=2

Карты для MyController.Open () действие?

public class MyController : Controller 
{ 
    public ActionResult Open(int a, int b) 
    { 
     //..... 
    } 

    public ActionResult Close(string c) 
    { 
     //..... 
    } 
} 

Примечание: существует несколько возможных значений cmd, каждый из которых сопоставляется с действием одного и того же контроллера.

ответ

2

Вы можете написать собственный маршрут:

public class MyRoute : Route 
{ 
    public MyRoute() 
     : base(
      "something", 
      // TODO: replace the name of the controller with the actual 
      // controller containing the Open and Close actions 
      // What you have shown in your question is not an MVC controller. 
      // In ASP.NET MVC controllers must derive from the Controller class 
      new RouteValueDictionary(new { controller = "home" }), 
      new MvcRouteHandler() 
     ) 
    { } 

    public override RouteData GetRouteData(HttpContextBase httpContext) 
    { 
     var rd = base.GetRouteData(httpContext); 
     if (rd == null) 
     { 
      return null; 
     } 
     var cmd = httpContext.Request.QueryString["cmd"]; 
     if (!string.IsNullOrEmpty(cmd)) 
     { 
      rd.Values["action"] = cmd; 
      return rd; 
     } 
     return null; 
    } 
} 

, а затем зарегистрировать собственный маршрут:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    // register the custom route before the default route, 
    // to ensure that it handles requests to /something 
    routes.Add("something", new MyRoute()); 

    routes.MapRoute(
     "Default", 
     "{controller}/{action}/{id}", 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
} 
+0

Спасибо, будем стараться, когда домой. Кажется, это правильное решение. – deerchao

Смежные вопросы