加入收藏 | 设为首页 | 会员中心 | 我要投稿 4S站长网 (https://www.4s3.cn/)- 科技、混合云存储、数据迁移、云上网络、数据计算!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2023-12-16 19:56:27 所属栏目:asp.Net 来源:DaWei
导读: 我有以下情况我想接受以下路径


'/type/view/23' or '/type/view/hats'
其中23是帽子的ID.
控制器看起来像这样:

public class TypeController
{
[AcceptVerbs(HttpVe

我有以下情况我想接受以下路径 '/type/view/23' or '/type/view/hats'

其中23是帽子的ID.

控制器看起来像这样:

public class TypeController { [AcceptVerbs(HttpVerbs.Get)] public ActionResult View(int id) { ... } }

现在如果他们传球23没问题.如果他们传递帽子,我有一些工作要做.现在我想知道在这种情况下我会通过使用ActionFilter将帽子转换为23,该ActionFilter查看作为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" ); } ... } }

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

(编辑:4S站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章