Asp.net mvc 是否可以使用route属性仅接受route参数的特定值?

Asp.net mvc 是否可以使用route属性仅接受route参数的特定值?,asp.net-mvc,asp.net-mvc-5,url-routing,asp.net-mvc-routing,attributerouting,Asp.net Mvc,Asp.net Mvc 5,Url Routing,Asp.net Mvc Routing,Attributerouting,下面的代码完成了我想做的事情。如果字符串参数forsalerent有任何值,但ForSale或ForRent除外,则操作方法返回HttpNotFoundResult。我的问题是,仅使用路由属性是否可行 [Route("post/{ForSaleOrRent}")] public ActionResult PostProperty(string ForSaleOrRent) { bool IsValidUrl = ForSaleOrRent.ToUpper() == "FORSALE" |

下面的代码完成了我想做的事情。如果字符串参数
forsalerent
有任何值,但
ForSale
ForRent
除外,则操作方法返回
HttpNotFoundResult
。我的问题是,仅使用路由属性是否可行

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

只需使用内联约束

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


使用两个不同的函数映射特定的地址不会解决您的问题吗?@Phil1970上面的代码也可以,但我想知道是否可以使用route属性来实现这一点。为什么不首先使用
enum
呢?@haim770您是个天才。@AmitHasan,通常在MVC中,模型验证是模型切割过程的一部分。因此,如果要为
enum
类型编写自定义模型绑定器,则可以将其标记为对任何与
FORSALE
FORRENT
不匹配的值无效(例如)。如果你觉得这是一种方法,我会用代码写一个答案。这会给我ForSaleOrRent的值吗?我刚刚测试了它,它显示了错误-“DefaultInlineConstraintResolver类型的内联约束解析程序无法解析以下内联约束:'values(forrent | forsale')。我对此不太确定。它在帖子中说“属性路由以前提供了自定义的内联约束,就像这样”,但没有给出任何指示它们是如何改变的。我找到了上面的第二个链接,并更正了约束。或者,您可以使用第二个链接中的
值约束
(请参见“自定义路线约束”部分)。如何同时忽略大小写?