【问题标题】:Is it possible to only accept specific value of a route parameter using route attribute?是否可以使用路由属性只接受路由参数的特定值?
【发布时间】:2016-10-01 07:09:57
【问题描述】:

下面的代码做了我想做的事。如果字符串参数ForSaleOrRent 具有除ForSaleForRent 之外的任何值,则操作方法返回HttpNotFoundResult。我的问题是仅使用 Route 属性是否可行?

[Route("post/{ForSaleOrRent}")]
public ActionResult PostProperty(string ForSaleOrRent)
{
    bool IsValidUrl = ForSaleOrRent.ToUpper() == "FORSALE" || 
                      ForSaleOrRent.ToUpper() == "FORRENT";
    if (!IsValidUrl)
    {
        return new HttpNotFoundResult();
    }
    return View(ForSaleOrRent);
}

【问题讨论】:

  • 不会使用 2 个不同的函数映射特定地址来解决您的问题吗?
  • @Phil1970 上面的代码也可以,但我想知道这是否可以使用 route 属性来完成。
  • 为什么不首先使用enum
  • @haim770 你是个天才。
  • @AmitHasan,通常在 MVC 中,模型验证是作为模型处理过程的一部分进行的。因此,如果您要为您的 enum 类型编写自定义模型绑定器,您将能够将其标记为对于任何与 FORSALEFORRENT 不匹配的值(例如)无效。如果你觉得这是要走的路,我会用代码写一个答案。

标签: asp.net-mvc asp.net-mvc-5 url-routing asp.net-mvc-routing attributerouting


【解决方案1】:

只需使用内联约束

[Route("post/{ForSaleOrRent:regex(^forrent$|^forsale$)}")]
public ActionResult PostProperty(string ForSaleOrRent)
{
    return View(ForSaleOrRent);
}

参考文献:

【讨论】:

  • 这会给我 ForSaleOrRent 的价值吗?
  • 我刚刚对其进行了测试,它显示错误-“'DefaultInlineConstraintResolver' 类型的内联约束解析器无法解析以下内联约束:'values(forrent|forsale)'。”
  • 我不太确定。它在帖子“属性路由以前提供自定义内联约束,就像这样”中说,但没有说明它们是如何更改的。我找到了上面的第二个链接,并更正了约束。或者,您可以使用第二个链接中的ValuesConstraint(请参阅自定义路由约束部分)。
  • 如何同时忽略大小写?
猜你喜欢
  • 2016-01-14
  • 1970-01-01
  • 2015-12-28
  • 2018-12-04
  • 2021-05-11
  • 2021-02-28
  • 2013-11-10
  • 2021-02-26
  • 2014-08-18
相关资源
最近更新 更多