C# 使用参数调用该方法
如何使用url中的参数调用控制器的方法 例如:无法修改URLC# 使用参数调用该方法,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¶m1="login" url #2: example.com/somecontroller?method=function2¶m1="login"¶m2="pass" 在控制器中,我们有两种方法: public class SomeController:BaseController
url #1: example.com/somecontroller?method=function1¶m1="login"
url #2: example.com/somecontroller?method=function2¶m1="login"¶m2="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,并调用相应控制器的相应操作。您只需要确保有一个有效的路由来捕获无效的方法名。您可以编写路由示例吗?