如何使用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{
public void function1(string param1)
{
//logic
}
public void function2(string param1, string param2)
{
//logic
}
}
有什么想法??
答案 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();
}
}