对于浏览器,asp.net Zero 使用基于Cookie的身份认证,但是,如果在移动应用程序中使用Web API或应用服务(通过动态Web API公开),可能需要基于令牌的身份认证机制。ASP.NET Zero中包含令牌身份认证基础架构。在.WebApi项目中的AccountController 有一个Authenticate 动作,用于获取令牌,然后你就可以在后续请求中使用该令牌。
这里,Postman(Chrome 扩展)将用于演示请求和相应信息。
如下图所示,向 http://localhost:6234/api/Account/Authenticate 发送一个Context-Type=”application/json”的POST请求
我们发送了一个Json的请求,消息体中包含tenancyName, userNameOrEmailAddress 和 passWord。tenancyName不会被用来作为管理员用户的身份认证。如上所示,返回JSON里的result属性包含了令牌,你可以保存或者在后续请求中使用。
你可以用验证后得到的令牌调用任何需要授权的行为。所有的应用服务都可以远程调用。举个栗子,你可以使用User Service来获取用户列表:
只需要发出一个包含Content-Type=”application/json”*和Authorization=”Bearer your-auth-token”的POST请求到http://localhost:6234/api/services/app/user/GetUsers*,请求的body为空。当然,请求和响应的主体信息会根据调用的API不同而不同。
几乎所有的用户界面也可以通过使用API来操作(因为用户界面也使用相同的Web API)。
ASP.NET Zero 已经集成了 Swagger UI。Swagger UI 在WebApi 项目中的 WebApiModule类中进行配置,可以浏览器中打开”/swagger/ui/index”来访问 Swagger UI。
ASP.NET Zero 启动项目包含了单元测试和集成测试。测试组件使用下列工具开发: - xUnit 作为测试框架 - Shouldly 作为断言库 - Effort Mocking 实体和数据库 - Abp.TestBase 简化了ABP的应用集成测试
测试覆盖了领域层(Core)和应用层。打开测试资源管理器(在VS主菜单的 测试/窗口 下面)运行单元测试。
在ASP.NET Zero 2.2版本里面针对单元测试引入了一个叫 MultiTenancyEnabled 的配置项。如果在你领域层中没有启用多租户,那么你还需要在单元测试项目的 app.config中将该设置改为false,这样,多租户的测试将不会执行。因为一些单元测试(租户创建,版本创建等)只适用于多租户概念。
这些单元测试可以帮助你理解代码。此外,当你为你的应用层的方法写单元测试时,他们也可以作为一个模板。
所有的单元测试类()都派生于APPTestBase。它为每个测试初始化ABP系统,使用Effort模拟数据库,创建测试数据并且创建日志。它也为一些测试提供了一些常用的方法。
下面是一个应用层的单元测试例子:
public class UserAppService_Delete_Tests : UserAppServiceTestBase{ [Fact] public async Task Should_Delete_User() { //Arrange CreateTestUsers(); var user = await GetUserByUserNameOrNullAsync("artdent"); user.ShouldNotBe(null); //Act await UserAppService.DeleteUser(new IdInput<long>(user.Id)); //Assert user = await GetUserByUserNameOrNullAsync("artdent"); user.IsDeleted.ShouldBe(true); }}它首先创建了一些测试用户,然后检查是否有一个用户名为”artdent”的用户,找到后调用UserAppService的DeleteUser方法(正在测试)。最终,确认这个用户是否被删除。这里,用户是执行的软删除,所以被执行删除后,它的IsDelete属性将变为true。
见该文章了解更多关于单元测试的知识。
在ASP.NET Zero里使用到许多开源框架和库。
服务端 - ASP.NET Boilerplate Framework & Module-Zero - ASP.NET MVC - ASP.NET Web API - ASP.NET Identity Framework (and social login extensions) - ASP.NET Web Optimization Framework - SignalR - EntityFramework - EntityFramework.DynamicFilters - Castle Windsor - AutoMapper - HangFire - Log4Net - RecaptchaNet - xUnit - Swashbuckle - StackExchange.Redis - SharpZipLib - System.Linq.Dynamic - EPPlus
客户端 - Metronic Theme - Twitter Bootstrap - Bootstrap Hover Dropdown - Bootstrap Date Range Picker - Bootstrap Switch - Bootstrap Select - AngularJs - Angular UI-Bootstrap - Angular UI-Router - Angular UI-Utils - Angular UI-Grid - Angular File Upload - Angular Date Range Picker - Angular ocLazyLoad - Angular Moment - Angular Bootstrap Switch - jQuery - jQuery UI - jQuery BlockUI - jQuery Slimscroll - jQuery Sparkline - jQuery Uniform - jQuery Validation - jQuery jTable - jQuery Ajax Forms - Js Cookie - Modernizr - Moment.js - Moment.js Timezone - Underscore.js - JsTree - Morris - Respondjs - Font-Awesome - Simple Line Icons - SpinJs - SweetAlert - Toastr
新闻热点
疑难解答