从客户端向服务器发送信息时,是否在客户端或服务器端(或两者)强制执行规则?

时间:2015-05-28 23:44:12

标签: javascript c# asp.net asp.net-mvc http-post

我的问题是关于什么是必要和/或最佳实践。

假设,例如我需要从输入到我的控制器的一些文本,并且该文本不是空白的。

<form action="BaHumBug/Index" method="post" id="xmasTextForm">
    <input name="xmasText" type="text" id="xmasTextInput" />
</form>

我是否强制执行客户端没有空文本的规则

$('#xmasTextForm').submit(function(ev) {
{
    if ($('#xmasTextForm').val().isWhiteSpace())
    {
        alert("Fill the input with something, dude!");
        return false;
     }
}

或服务器端

[HttpPost]
    public ActionResult Index (string xmasText)
    {
        if (xmasText.IsWhiteSpace())
        {
             // ....
    }

或者我是否同时进行2层保护?或者选择取决于其他因素?

3 个答案:

答案 0 :(得分:2)

在控制器上至少进行验证始终是一个好习惯,这样您就可以确定您的应用程序没有收到无效数据。

客户端的验证也很重要,因为当客户端以错误的方式获取表单时,您可以为客户提供良好的反馈。

对于代码和控制器的良好设计有很大帮助的一点是应用TDD(测试驱动开发方法),如果您熟悉,可以访问此link以获得更多信息。

通过测试,您可以通过理解并考虑对可能的输入案例的良好报道来设计您的应用程序。

答案 1 :(得分:0)

如前所述 - 见JavaScript: client-side vs. server-side validation - 两者都有优点。但我会说它在服务器上是必不可少的。

答案 2 :(得分:0)

Its always good to have validations at client side as well as server side.

如果有人从互联网选项禁用javascript,原因就是如此。如果在服务器端没有验证,那么你的用例就会失败。

You can use annotations [Required] attribute to make it mandatory field.
If JavaScript is enabled,and there is no user input in mandatory field,you will see control will not pass to controller action.

In Case JavaScript is disabled,control will pass to controller action with **ModelState.IsValid** value will be false.

Server side code should be like this:

[HttpPost]
    public ActionResult Index (string xmasText)
    {
       if (ModelState.IsValid)//rather than check of whitespace
        {
             // ....
        }
    }