Маршрут по строке запроса - PullRequest
0 голосов
/ 08 января 2012

Что мне делать, если мне нужен 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, каждое из которых сопоставлено действию одного и того же контроллера.

1 Ответ

2 голосов
/ 08 января 2012

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

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 }
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...