我可以有一个带有通用参数名称的路由吗
Can I have a route with generic parameter name
我正在研究 ASP.Net MVC 路由。我想创建一个将参数传递给动作的路由,而不考虑参数名称。我已经阅读了一些有关此的文章并尝试了不同的选项,但无法使其正常工作,所以想知道这是否可行?
这是我的问题示例:
我的 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 中的参数名称不匹配,它们似乎没有通过...
是否可以用一条路由处理这两种action方法?如果是怎么办?
Is it possible to handle these two action methods with one route? if so how?
您需要将两个操作的参数命名为相同以匹配路由
例如
//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) {
//...
}
}
我正在研究 ASP.Net MVC 路由。我想创建一个将参数传递给动作的路由,而不考虑参数名称。我已经阅读了一些有关此的文章并尝试了不同的选项,但无法使其正常工作,所以想知道这是否可行?
这是我的问题示例:
我的 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 中的参数名称不匹配,它们似乎没有通过...
是否可以用一条路由处理这两种action方法?如果是怎么办?
Is it possible to handle these two action methods with one route? if so how?
您需要将两个操作的参数命名为相同以匹配路由
例如
//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) {
//...
}
}