处理访问者构建自己的URL并将我们期望的ID替换为他们喜欢的任何东西的最佳方法是什么?
例如:
ASP.Net MVC - handling bad URL parameters
但是用户也可以很容易地将URL替换为:
https://stackoverflow.com/questions/foo
我已经想过让每个控制器函数参数都成为一个String
,并对它们使用Integer.TryParse()
-如果通过了,那么我就有了一个ID并可以继续,否则我可以将用户重定向到未知/未找到或索引视图。
Stack Overflow很好地处理了它,我也想这么做--你是怎么做的,或者你有什么建议?
发布于 2008-10-26 00:08:19
这里有一些有用的信息,可能会有所帮助。如果你有一个动作方法
public ActionResult Edit(int? id)
{}
然后如果有人输入
/Home/Edit/23
参数id将为23。但是,如果有人键入
/Home/Edit/Junk
那么id将为null,这很酷。我以为它会抛出一个强制转换错误之类的东西。这意味着如果id不是空值,那么它就是一个有效的整数,并且可以传递给你的服务,等等,以便进行数据库交互。
希望这能为你提供一些我在测试时发现的信息。
发布于 2008-10-25 13:13:50
在ASP.NET MVC中,您可以定义一个实现IActionFilter接口的过滤器。您将能够使用此属性装饰您的操作,以便它将在您的操作上、操作之前或操作之后执行。
在您的例子中,您将把它定义为在您的操作之前执行。这样,如果传递的参数中有错误,您可以取消它。这里的主要好处是,你只需编写一次检查传递的参数的代码(即,你在过滤器中定义它),并在你的控制器操作中使用它。
有关MVC filter的更多信息,请单击此处:http://haacked.com/archive/2008/08/14/aspnetmvc-filters.aspx
发布于 2008-10-25 13:30:07
可以将约束指定为正则表达式,也可以定义自定义约束。看看这篇博客文章,了解更多信息:
你仍然需要处理id 43243没有映射到任何可以作为IActionFilter或者直接在你的控制器中处理的东西的情况。
https://stackoverflow.com/questions/236349
复制相似问题