Merge pull request #733 from cnAbp/Translate

Update Dynamic-CSharp-API-Clients and other translation
pull/746/head
Halil İbrahim Kalkan 7 years ago committed by GitHub
commit b2cbe94348
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -7,15 +7,15 @@ ABP可以自动创建C# API 客户端代理来调用远程HTTP服务(REST APIS).
你的service或controller需要实现一个在服务端和客户端共享的接口.因此,首先需要在一个共享的类库项目中定义一个服务接口.例如:
````csharp
public interface IBookService : IApplicationService
public interface IBookAppService : IApplicationService
{
Task<List<BookDto>> GetListAsync();
}
````
你的接口需要实现`IRemoteService`接口.由于`IApplicationService`继承自`IRemoteService`接口.所以`IBookService`完全满足这个条件.
为了能自动被发现,你的接口需要实现`IRemoteService`接口.由于`IApplicationService`继承自`IRemoteService`接口.所以`IBookAppService`完全满足这个条件.
在你的服务中实现这个类,你可以使用[Auto API Controller](Auto-API-Controllers.md)将你的服务暴漏为一个REST API 端点.
在你的服务中实现这个类,你可以使用[auto API controller system](Auto-API-Controllers.md)将你的服务暴漏为一个REST API 端点.
## 客户端代理生成
@ -45,13 +45,6 @@ public class MyClientAppModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
//配置远程端点
context.Services.Configure<RemoteServiceOptions>(options =>
{
options.RemoteServices.Default =
new RemoteServiceConfiguration("http://localhost:53929/");
});
//创建动态客户端代理
context.Services.AddHttpClientProxies(
typeof(BookStoreApplicationModule).Assembly
@ -60,10 +53,24 @@ public class MyClientAppModule : AbpModule
}
````
`RemoteServiceOptions`被用来为远程服务配置端点(本例设置了默认的端点,当然你也可以拥有不同的服务端点供不同的客户端使用.参考本文"多个远程服务端点"小节).
`AddHttpClientproxies`方法获得一个程序集,找到这个程序集中所有的服务接口,创建并注册代理类.
### Endpoint配置
`appsettings.json`文件中的`RemoteServices`节点被用来设置默认的服务地址.下面是最简单的配置:
````
{
"RemoteServices": {
"Default": {
"BaseUrl": "http://localhost:53929/"
}
}
}
````
查看下面的"RemoteServiceOptions"章节获取更多详细配置.
## 使用
可以很直接地使用.只需要在你的客户端程序中注入服务接口:
@ -71,9 +78,9 @@ public class MyClientAppModule : AbpModule
````csharp
public class MyService : ITransientDependency
{
private readonly IBookService _bookService;
private readonly IBookAppService _bookService;
public MyService(IBookService bookService)
public MyService(IBookAppService bookService)
{
_bookService = bookService;
}
@ -89,38 +96,32 @@ public class MyService : ITransientDependency
}
````
本例注入了上面定义的`IBookService`服务接口.当客户端调用服务方法的时候动态客户端代理就会创建一个HTTP调用.
本例注入了上面定义的`IBookAppService`服务接口.当客户端调用服务方法的时候动态客户端代理就会创建一个HTTP调用.
## 详细配置
### IHttpClientProxy接口
### RemoteServiceOptions
你可以像上面那样注入`IBookAppService`来使用客户端代理,也可以注入`IHttpClientProxy<IBookAppService>`获取更多明确的用法.这种情况下你可以使用`IHttpClientProxy<T>`接口的`Service`属性.
你可以像上面展示的那样配置`RemoteServiceOptions`.也可以从`appsettings.json`文件中读取.在你的`appsettings.json`文件中添加`RemoteServices`节点:
## 配置
````json
{
"RemoteServices": {
"Default": {
"BaseUrl": "http://localhost:53929/"
}
}
}
````
### RemoteServiceOptions
然后你可以像下面这样将`IConfigurationRoot`实例直接传递到`Configure<RemoteServiceOptions>()`方法中:
默认情况下`RemoteServiceOptions`从`appsettings.json`获取.或者,你可以使用`Configure`方法来设置或重写它.如:
````csharp
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
context.Services.Configure<RemoteServiceOptions>(configuration);
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.Configure<RemoteServiceOptions>(options =>
{
options.RemoteServices.Default =
new RemoteServiceConfiguration("http://localhost:53929/");
});
//...
}
````
这种方式对于不修改代码来改变配置是非常有用的.
#### 多个远程服务端点
### 多个远程服务端点
上面的例子已经配置了"Default"远程服务端点.你可能需要为不同的服务创建不同的端点.(就像在微服务方法中一样,每个微服务具有不同的端点).在这种情况下,你可以在你的配置文件中添加其他的端点:
@ -137,10 +138,6 @@ context.Services.Configure<RemoteServiceOptions>(configuration);
}
````
下一节学习如何使用这个新的端点.
### AddHttpClientProxies方法
`AddHttpClientProxies`方法有一个可选的参数来定义远程服务的名字:
````csharp
@ -150,4 +147,19 @@ context.Services.AddHttpClientProxies(
);
````
`remoteServiceName`参数会匹配通过`RemoteServiceOptions`配置的服务端点.如果`BookStore`端点没有定义就会使用默认的`Default`端点.
`remoteServiceName`参数会匹配通过`RemoteServiceOptions`配置的服务端点.如果`BookStore`端点没有定义就会使用默认的`Default`端点.
### 作为默认服务
当你为`IBookAppService`创建了一个服务代理,你可以直接注入`IBookAppService`来使用代理客户端(像上面章节中将的那样).你可以传递`asDefaultService:false`到`AddHttpClientProxies`方法来禁用此功能.
````csharp
context.Services.AddHttpClientProxies(
typeof(BookStoreApplicationModule).Assembly,
asDefaultServices: false
);
````
如果你的程序中已经有一个服务的实现并且你不想用你的客户端代理重写或替换其他的实现,就需要使用`asDefaultServices:false`
> 如果你禁用了`asDefaultService`,你只能使用`IHttpClientProxy<T>`接口去使用客户端代理.(参见上面的相关章节).

@ -54,7 +54,7 @@ ABP框架的[文档](https://abp.io/documents/)也是使用的此模块.
现在一个空的ABP项目已经创建完成! 现在你可以运行项目并且查看网站.
输入用户名 `admin` 密码 `1q2w3E*`到网站.
输入用户名 `admin` 密码 `1q2w3E*`到网站.
### 2- 引用文档模块包

@ -11,7 +11,7 @@ ABP是一个 **模块化的应用程序框架** 由十多个 **nuget packages**
有一些由ABP社区开发和维护的 **开源免费** 的应用程序模块:
* **Account**: 用于用户登/注册应用程序.
* **Account**: 用于用户登/注册应用程序.
* **Audit Logging**: 用于将审计日志持久化到数据库.
* **Background Jobs**: 用于在使用默认后台作业管理器时保存后台作业.
* **Blogging**: 用于创建精美的博客. ABP的[博客](https://abp.io/blog/abp/) 就使用了此模块.

@ -1,6 +1,6 @@
## ASP.NET Core MVC Tutorial - Part III
## ASP.NET Core MVC 教程 - 第三章
### About this Tutorial
### 关于本教程
这是本教程所有章节中的第三章.下面是所有的章节:
@ -214,4 +214,4 @@ public async Task Should_Not_Create_A_Book_Without_Name()
### 测试 Web 页面
TODO
TODO

@ -16,11 +16,11 @@
"text": "从空项目开始",
"items": [
{
"text": "使用Console Application",
"text": "使用ASP.NET Core Web Application",
"path": "Getting-Started-AspNetCore-Application.md"
},
{
"text": "使用 ASP.NET Core Web Application",
"text": "使用Console Application",
"path": "Getting-Started-Console-Application.md"
}
]

@ -7,7 +7,7 @@
"DefaultErrorMessage": "发生错误!",
"DefaultErrorMessageDetail": "服务器未发送错误的详细信息.",
"DefaultErrorMessage401": "未通过身份验证!",
"DefaultErrorMessage401Detail": "你需要进行身份认证(登)后再执行此操作.",
"DefaultErrorMessage401Detail": "你需要进行身份认证(登)后再执行此操作.",
"DefaultErrorMessage403": "你没有权限!",
"DefaultErrorMessage403Detail": "你不能执行此操作!",
"DefaultErrorMessage404": "未找到资源!",
@ -25,7 +25,7 @@
"Delete": "删除",
"Edit": "修改",
"ProcessingWithThreeDot": "处理中...",
"Login": "登",
"Login": "登",
"Register": "注册",
"Logout": "注销",
"Submit": "提交",

@ -6,10 +6,10 @@
"UserNameOrEmailAddress": "用户名称或邮箱地址",
"Password": "密码",
"RememberMe": "记住我",
"UseAnotherServiceToLogin": "使用另一个服务登",
"UseAnotherServiceToLogin": "使用另一个服务登",
"UserLockedOutMessage": "登录失败,用户账户已被锁定.请稍后再试.",
"InvalidUserNameOrPassword": "用户名或密码错误!",
"LoginIsNotAllowed": "无法登陆!你需要确认邮箱地址/手机号.",
"LoginIsNotAllowed": "无法登录!你需要验证邮箱地址/手机号.",
"SelfRegistrationDisabledMessage": "应用程序未开放注册,请联系管理员添加新用户."
}
}

Loading…
Cancel
Save