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

时间:2016-11-15 13:51:33

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

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

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

问题是我们通过工作代码而不是标题查找职业信息,因此我们最终得到一个未使用的参数。我不认为这是最佳做法。特别是因为你可以输入任何你想要的职业头衔,但仍然可以获得工作细节。像这样的网址仍然可以使用:mydomain.com/careers/yourmom/1234。

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

是否有更好的方法在网址中实施额外参数,并且不允许将无效的职位名称放入网址?

2 个答案:

答案 0 :(得分:2)

您可以创建your own custom route constraint,这将只允许匹配包含与作业代码匹配的作业标题的路线。

您必须继承IRouteConstraint界面并实施Match方法。该方法接收的参数之一是RouteValueDictionary

它是包含路由参数的键/值对的集合。您可以使用它们来查找职位,并确保它与职务代码保持一致。

See this example for more info

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

答案 1 :(得分:0)

我们最终做的是将两个参数传递给控制器​​(jobTitle和jobCode),通过jobCode查找记录,并验证记录的slug是否与传入的jobTitle匹配(所有不区分大小写)。这样我们就可以防止虚假网址返回作业详细信息页面,并让UI团队保持高兴。