1

我正在构建一个 Web 服务 API 来提供来自管理系统的远程访问数据。

API 中有各种功能,并且都需要访问密钥。

我目前正在包装所有函数的内部,如下所示:

Function GETSOMETHING(api_key)
    If IntegratedApis.Grant_Api_Access(api_key) Then
        /// DO STUFF
    Else
        Return "API KEY not provided or incorrect"
    End
 End Function

显然我的IntegratedApis.Grant_Api_Access(api_key)函数返回一个布尔输出并检查key数据库中的用户

这行得通,但问题是它有点维护痛苦。我怎样才能自动将它包装在对 web 服务的所有调用中?

例如,是否可以通过global.asax文件返回错误Application_BeginRequest

4

1 回答 1

0

寻找 .NET 的面向方面编程 (AOP) 框架。这些框架基本上拦截所有调用并通过一个严重依赖反射的函数运行它们。

例如:

// Original function call that you want routed through AOP.
[KeyCheck]
public void OriginalFunctionCall() {
     ...
}

// AOP function that accepts all functions that were decorated with [KeyCheck].
// Runs logic before the function, runs the function, runs logic after.
public void Intercept() {
    // Before original function.
    keyCheck();

    // Original function
    functionCall();

    // Logic after original function.
    cleanUp();
}

一些框架允许您在所有要通过 AOP 框架路由的调用上添加注释。当我使用这种方法时,您可以在调用执行之前执行任何逻辑,然后执行调用,然后在原始调用之后执行您想要执行的任何逻辑。

一些 .NET AOP 框架:

最后一点:注意性能。一些框架——因为它们大量使用反射——会减慢你的代码。

于 2013-08-13T16:24:48.147 回答