如何处理未使用的 MVC 路由参数

How to Deal with Unused MVC Routing Parameters

我有一个 MVC 应用程序,UI 团队要求职业页面的 url 遵循以下格式:mydomain.com/careers/{jobTitle}/{JobCode}。我可以在职业控制器中这样做:

    public ActionResult Detail(string jobTitle, string jobCode)
    {
        var model = getModelFromDb(JobCode);
        return View(model);
    }

问题是我们按职位代码而不是职位查找职业信息,所以我们最终得到一个未使用的参数。我认为这不是最佳做法。特别是因为您可以输入任何您想要的职业头衔,并且仍然可以获得工作详细信息。像这样的 url 仍然有效:mydomain.com/careers/yourmom/1234。

我想我们总是可以通过标题和代码查找职业,但这似乎毫无意义,因为代码是唯一的。

是否有更好的方法来实现 url 中的额外参数并避免将无效职位放入 url?

您可以创建 your own custom route constraint,这将允许仅匹配包含与职位代码匹配的职位的路线。

您必须继承 IRouteConstraint interface and implement the Match method. One of the parameters that the method receive is a RouteValueDictionary

它是包含路由参数的 key/value 对的集合。您可以使用它们来查找职位名称并确保它与职位代码一致。

See this example for more info.

通过这种方式,您将能够只接收正确的路由并拒绝不正确的路由,例如 mydomain.com/careers/yourmom/1234

我们最终做的是将两个参数(jobTitle 和 jobCode)传递给控制器​​,通过 jobCode 查找记录,并验证记录的 slug 是否与传入的 jobTitle 匹配(不区分大小写)。通过这种方式,我们可以防止虚假 URL 返回职位详情页面,并让 UI 团队满意。