ASP.NET Web API淘汰验证

Jus*_*ssi 6 asp.net asp.net-mvc unobtrusive-validation asp.net-web-api knockout.js

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

我的上下文是Durandal上的中型(约20-40个实体和商业层)应用程序.

我找到的不成功/不合适的方式及其解释:

1.使用Breeze.js

在第一次看来,Breeze.js看起来就像我需要的那样.工作原理:它通过/ Metadata链接共享json,然后将其映射到knockout.valudate插件.一切都很好,但共享实体对我来说看起来很奇怪(我需要忘记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应用程序的解决方案吗?

PW *_*Kad 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">
Run Code Online (Sandbox Code Playgroud)

Breeze.js 上的文档始终在更新和改进,但作为一个社区,我们可以改进以了解有关如何利用Breeze.js 的更多信息。以下是一些关于如何在客户端应用程序中设置 Breeze.js 的提示方法和一些基本场景 -

基本场景

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

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

    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 控制器操作获取数据

    您可以将 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 很快就风靡一时,为什么要不断地重新造轮子呢?微风怎么能做到呢?

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

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

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

为什么 Breeze.js 安全?

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

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

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

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

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

永远不要相信基于浏览器的应用程序会为您提供非恶意内容,即使在 99.99% 的情况下也是如此 - 0.01% 可能是压垮骆驼的最后一根稻草。