添加密钥检查所有尝试访问Web服务中的任何功能

时间:2013-08-13 09:01:35

标签: asp.net vb.net web-services api asmx

我正在构建一个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上的错误?

1 个答案:

答案 0 :(得分: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框架:

最后注意:小心表现。一些框架 - 因为它们大量使用反射 - 会降低代码的速度。