使用参数调用方法

时间:2014-10-02 06:32:23

标签: c# asp.net-mvc asp.net-mvc-routing

如何使用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
    }
}

有什么想法??

2 个答案:

答案 0 :(得分:0)

生成路线时,您的链接应如下所示:

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

其中login是function1方法的param1。

以下是路线可能的示例:

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

答案 1 :(得分:0)

你不能在路由中指定查询字符串,但是你可以只为控制器创建一个路由,并且有一个泛型的actionresult,它根据你的查询字符串值选择要返回的action.eult:

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();


        }
    }

这允许您保持您的网址格式为/ {controller}?method = {methodName}& param1 = login

您必须以不同的方式处理每种方法的预期参数 - 例如,您可以执行此操作:

    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();


        }
    }