ABP理論學習之Web API控制器(新增)


返回總目錄


本篇目錄

介紹###

ABP通過Abp.Web.ApiNuget包集成了 ASP.NET Web API控制器。你可以像以往創建Asp.Net Web API控制器那樣創建Web API控制器。依賴注入對於有規律的ApiController(其實就是繼承自AbpApiController的控制器)是有效的。

但是你應該從AbpApiController派生控制器,它提供了許多有用的東西,並且更好地集成到了ABP中。

AbpApiController基類###

下面是一個派生於AbpApiController的簡單api控制器:

public class UsersController : AbpApiController
{
        
}

本地化

AbpApiController定義了L方法使得本地化更為簡單。例子:

public class UsersController : AbpApiController
{
    public UsersController()
    {
        LocalizationSourceName = "MySourceName";
    }

    public UserDto Get(long id)
    {
        var helloWorldText = L("HelloWorld");

        //...
    }
}

要使L方法生效,必須設置LocalizationSourceName。你可以在自己的api控制器基類中設置而不用在每個api控制器中都重復設置。

審計日志

審計日志不會為api控制器自動記錄。如果你要為api控制器記錄日志的話,應該在控制器或者它的action方法上聲明Audited特性。請查看審計日志獲取更多信息。

授權

你可以為api控制器或者action方法使用AbpApiAuthorize特性來阻止未授權的用戶使用控制器和action方法。例子:

public class UsersController : AbpApiController
{
    [AbpApiAuthorize("MyPermissionName")]
    public UserDto Get(long id)
    {
        //...
    }
}

AbpApiController也定義了檢查權限的IsGranted方法作為快捷方式。請查看授權一節獲取更多信息。

工作單元

Web API的action方法默認不是工作單元。例如,如果你需要在action方法中打開數據庫連接,就需要像下面那樣聲明UnitOfWork特性:

public class UsersController : AbpApiController
{
    private readonly IRepository<User, long> _userRepository;

    public UsersController(IRepository<User, long> userRepository)
    {
        _userRepository = userRepository;
    }

    [UnitOfWork]
    public virtual List<UserDto> Users(string filter)
    {
        var users = _userRepository
            .GetAll()
            .Where(u => u.UserName.StartsWith(filter))
            .ToList();

        //...
    }
}

這里我們聲明了UnitOfWork特性。因為倉儲的 GetAll()方法返回了 IQueryable,而當它使用 ToList()方法(由於IQueryable的延遲執行)時需要一個打開的數據庫連接,所以這里需要聲明該特性。注意該action方法應該聲明為virtual(否則攔截無法工作)。

請查看工作單元獲取更多。

其他

你還可以使用預注入的 AbpSession, EventBus, PermissionManager, PermissionChecker, SettingManager, FeatureManager, FeatureChecker, LocalizationManager, Logger, CurrentUnitOfWork等基屬性以及更多。

要了解以上屬性,請查閱其他相應博客。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM