ASP.NET Web API淘汰验证

时间:2013-09-20 19:25:38

标签: asp.net asp.net-mvc knockout.js asp.net-web-api unobtrusive-validation

我有一个与使用knockout和ASP.NET Web API进行客户端验证相关的问题。我希望视图完全是静态的(可能是排除根index.html / cshtml),我不想通过手工编写数据注释属性规则来重复自己。

我的上下文是Durandal上的中型(约20-40个带商业层的实体)应用。

我发现不成功/不合适的方式及其解释:

1。使用Breeze.js

在第一眼看来,Breeze.js看起来就像我需要的那样。工作原理:它通过/ Metadata链接共享json,然后将其映射到knockout.valudate plugin。一切都很好,但共享实体对我来说看起来很奇怪(我需要忘记Nunit,复杂的服务器逻辑等等......让你的datacontext公开是可怕的:不安全而不是数据安全!)。使用JObject参数保存方法对我来说也很奇怪。

2。从Web api获取数据,从Breeze或Web Api获取元数据(如何?)并在客户端上对其进行转换

我发现的唯一解决方案就是这个:https://github.com/johnculviner/FluentKnockoutHelpers。它在cshtml中呈现ALL(它不是那么重要,但从我的观点来看并不好)元数据,然后他将它映射为knockout.validate。可能在那里有一个类似的即用型框架,具有类似的功能,我可以从api通过json获取matadata并提供淘汰赛吗?

第3。在构建

的html中渲染cshtml

复杂的构建过程!

您可能有其他静态HTML和Web API应用程序的解决方案吗?

1 个答案:

答案 0 :(得分:1)

首先,我们必须首先就一件事达成一致 -

如果您没有JavaScript体验,首次使用Breeze从服务器获取数据可能会非常棘手

让我们看看为什么以及如何克服这一挑战的一些原因,或者在使用Breeze.js或任何客户端应用程序时跳过非必需的阅读并谈论安全性 -

<!--
    If you think this next section is 'Too Long' : 'Don't Read'
        and are just interested in security, skip down until
        you see 'Why is Breeze.js secure?'
-->

<section role="TL:DR">

breeze.js上的文档总是在更新和改进,但作为一个社区,我们可以进一步了解如何利用 breeze.js。以下是一些提示的方法以及如何在客户端应用程序中设置breeze.js的一些基本方案 -

基本情景

  1. 从Web API控制器操作中获取数据 -

    在使用Web API路由时,您可以将Breeze.js设置为使用它自己的元数据 -

    http://www.breezejs.com/documentation/web-api-routing http://pluralsight.com/training/Courses/TableOfContents/building-single-page-applications-breeze

  2. 使用EF / Breeze.WebApi从Web API Controller Action获取数据

    您可以将Breeze.js设置为使用VS2012 / 13中的ASP.NET MVC 5 / Web API 2项目。如果您想了解如何利用服务器端Breeze.WebApi作为帮助,请检查此列表中的链接或PluralSite.com等在线教育网站上的链接 -

    http://www.breezejs.com/samples

    http://www.pluralsite.com

    在样本中,您将了解如何使用85%的当前使用的Web技术。这包括Angular,Durandal,MongoDb,Node,Entity Framework,Require,Knockout,Ruby,Twitter Bootstrap,Backbone等......等等......

  3. 了解Breeze的工作原理 -

    http://learn.breezejs.com/

  4. 从您的SPA中找到完全解耦的服务器 -

    为什么要花费所有时间来设置自己的客户端数据库并创建对象图或使用不快速点亮的映射库? JavaScript ORM很快就变得风靡一时,因为为什么要继续重建轮子? Breeze怎么做呢?

    http://www.breezejs.com/samples/edmunds

    http://www.breezejs.com/samples/espn

    两个很好的例子,客户端技术可以使用完全解耦的API,而无需将客户端内容绑定到服务器端的任何特定堆栈。

  5. 为什么Breeze.js安全?

    您不应该向外界公开任何数据,无论它是什么或如何生成。如果您在客户端或服务器端有一个应用程序,在返回数据之前没有正确地对其用户进行身份验证,那么在查看客户端技术之前,您是如何确保正确进行身份验证的? / p>

    使用saveChanges()发回数据时怎么样?

    在极少数情况下我会设计一个应用程序,让浏览器免费漫游以发布/更新我的数据库。可能的情况是,如果要更改的内容是在我测试获取和发布数据的非常早期的开发周期中,并且业务层及其允许的内容(可能通过单元测试验证)被设置为允许不受限制地读取/写入数据

    但是如何将基于浏览器的应用程序转移到生产中呢?

    我永远不会将我的签名放在我没有读过的文件上,并且/我100%确定该文件已准备好签署。我也绝不会将代码从开发或QA环境传递到生产环境,而不会确保在我使用的技术堆栈的情况下满足我的要求。如果使用ASP.NET MVC和Session来存储用户信息是应用程序应该采用的方向,那么使用[Authorize]属性修饰控制器操作。如果您有其他形式的安全性,那么您需要始终保持正在暴露的数据的正确安全级别。

    永远不要相信基于浏览器的应用程序能够为您提供非恶意内容,甚至99.99%的时间 - .01%可能是打破骆驼背部的稻草。