Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用参数调用该方法_C#_Asp.net Mvc_Asp.net Mvc Routing - Fatal编程技术网

C# 使用参数调用该方法

C# 使用参数调用该方法,c#,asp.net-mvc,asp.net-mvc-routing,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

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

你知道吗???

当生成路由时,你的链接应该是这样的:

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

您不能在路由中指定查询字符串,但是您可以仅为控制器创建路由,并具有一个通用actionresult,该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();


        }
    }
这允许您保留/{controller}?method={methodName}¶m1=login的url格式

您必须以稍微不同的方式处理每个方法的预期参数-例如,您可以这样做:

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


        }
    }

您应该能够编写自定义路由来处理这些URL,并调用相应控制器的相应操作。您只需要确保有一个有效的路由来捕获无效的方法名。您可以编写路由示例吗?