gpt4 book ai didi

asp.net-mvc - asp.net mvc - string 或 int 的路由(即/type/23 或/type/hats)

转载 作者:行者123 更新时间:2023-12-04 20:25:53 24 4
gpt4 key购买 nike

我有以下情况,我想接受以下路线

 '/type/view/23' or '/type/view/hats'

其中 23 是帽子的 ID。

Controller 看起来像这样:
public class TypeController
{
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult View(int id)
{
...
}
}

现在如果他们通过 23 没有问题。如果他们通过帽子,我有一些工作要做。现在我想知道在这种情况下我是否会通过使用 ActionFilter 将 hats 转换为 23 来查看作为 id 传入的值是否是一个 int(如果是,请检查它是否存在于数据库中)或者它是否是一个字符串在数据库中查找传入的字符串的 id 是什么。在任何一种情况下,如果找不到匹配项,我都希望将用户重定向到不同的操作。

首先是我命名为正确的方法,其次是否可以从 ActionFilter 内进行重定向。

干杯
安东尼

最佳答案

更改您的签名以接受字符串。然后检查id的值是否为int。如果是,则按 id 查找,如果不是按名称查找。如果找不到匹配项,请进行重定向。

public class TypeController
{
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult View(string id)
{
Product product = null;
int productID = -1;
if (int.TryParse( id, out productID))
{
product = db.Products
.Where( p => p.ID == productID )
.SingleOrDefault();
}
else
{
product = db.Products
.Where( p => p.Name == id )
.SingleOrDefault();
}

if (product == null)
{
return RedirectToAction( "Error" );
}
...
}
}

我这样做的原因是为了知道要应用哪些 Controller /操作,框架将寻找与传入的路由数据签名匹配的 Controller /操作。如果您没有匹配的签名-- 在这种情况下,它接受一个字符串 -- 在调用任何过滤器之前,您将收到一个异常。不幸的是,我不认为你可以有一个接受字符串而另一个接受 int 的 - 在这种情况下,如果传递单个参数,框架将无法判断哪个应该匹配,至少如果它是一个数字,即。通过将其设为字符串参数并自行处理翻译,您可以让框架完成其工作并获得您想要的行为——无需过滤器。

关于asp.net-mvc - asp.net mvc - string 或 int 的路由(即/type/23 或/type/hats),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1061429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com