我可以使用通用参数名称

时间:2018-03-25 23:38:57

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

我正在研究ASP.Net MVC路由。我想创建一个将param传递给action的路由,而不管param名称。我已经对此做了一些阅读并尝试了不同的选项,但无法使其正常工作,所以想知道这是否可行?

以下是我的问题:

我的StudentController中有两个动作方法

// First Action in StudentController
public ActionResult GetStudentByName(string name)

// Second Action in StudentController
public ActionResult GetStudentById(int id)

现在我的路线配置中有:

// Get Student By Name
routes.MapRoute(
   name: "StudentByName",
   url: "Student/GetStudentByName/{name}",
   defaults: new { controller = "Student", action = "GetStudentByName", name = "" }
);

// Get Student By Id
routes.MapRoute(
    name: "StudentById",
    url: "Student/GetStudentById/{id}",
    defaults: new { controller = "Student", action = "GetStudentById", id = UrlParameter.Optional }
    );

这很好用,但我必须为这两个动作定义两条路线。我的行为是期望具有不同名称(名称和ID)的参数。

我想要一个通用路由,它处理两个Action方法并将参数传递给action,就像这样?

// Is this possible?
routes.MapRoute(
    name: "AspDefault",
    url: "{controller}/{action}/{GenericParamName}",
    defaults: new { controller = "Home", action = "Index", GenericParamName = UrlParameter.Optional }
);

我试过这个,但是无法让它运转起来。如果Action和Route中的参数名称不匹配,则它们似乎不会通过...

是否可以使用一条路线处理这两种操作方法?如果是这样的话?

1 个答案:

答案 0 :(得分:1)

  

是否可以使用一条路线处理这两种操作方法?如果是这样的话?

您需要将两个操作的参数命名为相同以匹配路径

例如。

//Student/GetStudentByName/JDoe
//Student/GetStudentById/13456
routes.MapRoute(
    name: "StudentDefault",
    url: "Student/{action}/{value}",
    defaults: new { controller = "Student", value = UrlParameter.Optional }
);

上述路线意味着必须将控制器操作更新为

public class StudentController : Controller {

    // First Action in StudentController
    public ActionResult GetStudentByName(string value) {
        //...
    }

    // Second Action in StudentController
    public ActionResult GetStudentById(int value) {
        //...
    }

}