2014-10-02 2 views
0

Как я могу вызвать метод контроллера, используя параметр в URL-адресе.Вызвать метод, используя параметр

Например: (URL не может быть изменить)

url #1: example.com/somecontroller?method=function1&param1="login" 

url #2: example.com/somecontroller?method=function2&param1="login"&param2="pass" 

В контроллере есть два метода:

public class SomeController:BaseController{ 

    public void function1(string param1) 
    { 
    //logic 
    } 

    public void function2(string param1, string param2) 
    { 
    //logic 
    } 
} 

есть какие-либо идеи ??

+0

Вы должны иметь возможность писать собственные маршруты для обработки этих URL-адресов и вызывать соответствующие действия соответствующего контроллера. Вам просто нужно убедиться, что существует допустимый маршрут для обнаружения недопустимых имен методов. – jmcilhinney

+0

Можете ли вы написать пример маршрута? – lails

ответ

0

Вы не можете указать querystrings в маршрутах, однако вы можете создать маршрут для всего контроллера и имеете общий ActionResult, который выбирает, который ActionResult, чтобы вернуться на основе ваших значений строки запроса:

routes.MapRoute(
    name: "Distributor", 
    url: "{controller}", 
    defaults: new { action = "Distributor" } 
); 

и новый контроллер действий:

public ActionResult Distributor(string method) 
    { 

     switch (method) 
     { 
      case "MyMethod1": 
       return MyMethod1(); 
      case "MyMethod2": 
       return MyMethod2(); 
      default: 
       return new HttpNotFoundResult(); 


     } 
    } 

Это позволяет сохранить свой формат адрес/{контроллер} Метод = {имяМетод} & param1 = Войти

Вы должны были бы обрабатывать ваши ожидаемые параметры для каждого метода немного по-другому - например, вы могли бы сделать это:

public ActionResult Distributor(string method) 
    { 

     switch (method) 
     { 
      case "MyMethod1": 
       return MyMethod1(Request.QueryString["param1"]); 
      case "MyMethod2": 
       return MyMethod2(Request.QueryString["param1"], Request.QueryString["param2"]); 
      default: 
       return new HttpNotFoundResult(); 


     } 
    } 
0

Когда маршрут генерируется вашу ссылку должен выглядеть следующим образом:

http://example.com/somecontroller/function1?param1="login" 

где Войти твой param1 для FUNCTION1 метода.

Вот пример того, что маршрут может выглядеть следующим образом:

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

Я не могу изменить адрес URL. Это маршрут по умолчанию ... – lails

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