您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)ASP.NET中怎么動態(tài)生成WebApi,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
建立動態(tài)WebApi控制器
Abp框架能夠通過應(yīng)用層自動生成web api:
public interface ITaskAppService : IApplicationService { GetTasksOutput GetTasks(GetTasksInput input); void UpdateTask(UpdateTaskInput input); void CreateTask(CreateTaskInput input); }
Abp框架通過一行關(guān)鍵代碼的配置就可以自動、動態(tài)的為應(yīng)用層建立一個web api 控制器:
DynamicApiControllerBuilder.For<ITaskAppService>("tasksystem/task").Build();
這樣就OK了!建好的webapi控制器(/api/services/tasksystem/task)所有的方法都能夠在客戶端調(diào)用。webapi控制器通常是在模塊初始化的時候完成配置。 ITaskAppService是應(yīng)用層服務(wù)(application service)接口,我們通過封裝讓接口實(shí)現(xiàn)一個api控制器。ITaskAppService不僅限于在應(yīng)用層服務(wù)使用,這僅僅是我們習(xí)慣和推薦的使用方法。 tasksystem/task是api 控制器的命名空間。一般來說,應(yīng)當(dāng)最少定義一層的命名空間,如:公司名稱/應(yīng)用程序/命名空間/命名空間1/服務(wù)名稱。 ‘a(chǎn)pi/services/’是所有動態(tài)web api的前綴。所以api控制器的地址一般是這樣滴:‘/api/services/tasksystem/task’,GetTasks 方法的地址一般是這樣滴: ‘/api/services/tasksystem/task/getTasks’。因?yàn)樵趥鹘y(tǒng)的js中都是使用駝峰式命名方法,這里也不一樣。 你也可以刪除一個api方法,如下:
DynamicApiControllerBuilder .For<ITaskAppService>("tasksystem/taskService") .ForMethod("CreateTask").DontCreateAction() .Build();
ForAll方法 在程序的應(yīng)用服務(wù)層建立多個api控制器可能讓人覺得比較枯燥,DynamicApiControllerBuilper提供了建立所有應(yīng)用層服務(wù)的方法,如下所示:
DynamicApiControllerBuilder .ForAll<IApplicationService>(Assembly.GetAssembly(typeof(SimpleTaskSystemApplicationModule)), "tasksystem") .Build();
ForAll方法是一個泛型接口,第一個參數(shù)是從給定接口中派生的集合,最后一個參數(shù)則是services命名空間的前綴。ForAll集合有ITaskAppService和 IpersonAppService接口。根據(jù)如上配置,服務(wù)層的路由是這樣的:'/api/services/tasksystem/task'和'/api/services/tasksystem/person'。
服務(wù)命名約定:服務(wù)名+AppService(在本例中是person+AppService) 的后綴會自動刪除,生成的webapi控制器名為“person”。同時,服務(wù)名稱將采用峰駝命名法。如果你不喜歡這種約定,你也可以通過“WithServiceName”方法來自定義名稱。如果你不想創(chuàng)建所有的應(yīng)用服務(wù)層,可以使用where來過濾部分服務(wù)。
你可以通過ajax來動態(tài)創(chuàng)建web api控制器。Abp框架對通過動態(tài)js代理建立web api 控制器做了些簡化,你可以通過js來動態(tài)調(diào)用web api控制器
abp.services.tasksystem.task.getTasks({ state: 1}).done(function (data) { //use data.tasks here..});
js代理是動態(tài)創(chuàng)建的,頁面中需要添加引用:
<script src="/api/abp.ServiceProxies/GetAll" type="text/javascript"></script>
服務(wù)方法(service methods)返回約定(可參見JQ的Deferred),服務(wù)方法使用Abp框架.ajax代替,可以處理、顯示錯誤。
自定義ajax代理方法的參數(shù):
Abp.services.tasksystem.task.createTask({
assignedPersonId: 3,
description: 'a new task description...'
},{ //override jQuery's ajax parameters
async: false,
timeout: 30000
}).done(function () {
Abp.notify.success('successfully created a task!');
});
所有的jq.ajax參數(shù)都是有效的。
'/api/abpServiceProxies/GetAll'將在一個文件中生成所有的代理,通過 '/api/abpServiceProxies/Get?name=serviceName' 你也可以生成單一服務(wù)代理,在頁面中添加:
<script src="/api/abpServiceProxies/Get?name=tasksystem/task" type="text/javascript"></script>
Abp框架能夠公開動態(tài)的api控制器作為angularjs服務(wù),如下所示:
(function() {
angular.module('app').controller('TaskListController', [
'$scope', 'abp.services.tasksystem.task',
function($scope, taskService) {
var vm = this;
vm.tasks = [];
taskService.getTasks({
state: 0
}).success(function(data) {
vm.tasks = data.tasks;
});
}
]);
})();
我們可以將名稱注入服務(wù),然后調(diào)用此服務(wù),跟調(diào)用一般的js函數(shù)一樣。注意:我們成功注冊處理程序后,他就像一個augular的$http服務(wù)。ABP框架使用angular框架的$http服務(wù),如果你想通過$http來配置,你可以設(shè)置一個配置對象作為服務(wù)方法的一個參數(shù)。
要使用自動生成的服務(wù),需要添加:
<script src="~/abp Framework/Framework/scripts/libs/angularjs/Abp Framework.ng.js"></script> <script src="~/api/abp Framework/ServiceProxies/GetAll?type=angular"></script>
ABP框架可以注入服務(wù)到Durandal框架,如下:
define(['service!tasksystem/task'], function (taskService) { //taskService can be used here});
上述就是小編為大家分享的ASP.NET中怎么動態(tài)生成WebApi了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。