【问题标题】:Can I have a route with generic parameter name我可以有一个通用参数名称的路由吗
【发布时间】:2018-09-04 01:06:55
【问题描述】:

我正在研究 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 中的参数名不匹配,就好像没有通过...

是否可以用一条路由处理这两种操作方法?如果是的话怎么办?

【问题讨论】:

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


    【解决方案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) {
            //...
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 2016-05-01
      相关资源
      最近更新 更多