我想做以下(伪代码):
[InternalOnly]
public ActionResult InternalMethod()
{ //magic }
“InternalOnly
”属性适用于在执行任何其他操作之前应检查HttpContext
请求IP的已知值的方法。
我将如何创建此“InternalOnly
”属性?
答案 0 :(得分:6)
您可以创建自定义过滤器属性:
public class InternalOnly : FilterAttribute
{
public void OnAuthorization (AuthorizationContext filterContext)
{
if (!IsIntranet (filterContext.HttpContext.Request.UserHostAddress))
{
throw new HttpException ((int)HttpStatusCode.Forbidden, "Access forbidden.");
}
}
private bool IsIntranet (string userIP)
{
// match an internal IP (ex: 127.0.0.1)
return !string.IsNullOrEmpty (userIP) && Regex.IsMatch (userIP, "^127");
}
}
答案 1 :(得分:1)
这是一个可以通过AOP(面向方面编程)解决方案解决的问题示例。对于这类事情,我通常建议PostSharp。
基本上,PostSharp允许您做的是创建属性,您可以将其用作代码中您希望插入样板代码的位置的标记。