Используйте атрибут для создания ограничения IP-адреса запроса - PullRequest
3 голосов
/ 03 июня 2009

Я хотел бы сделать следующее (псевдокод):

[InternalOnly]
public ActionResult InternalMethod()
{ //magic }

Атрибут "InternalOnly" предназначен для методов, которые должны проверять IP-адрес HttpContext на наличие известного значения, прежде чем делать что-либо еще.

Как мне создать этот атрибут "InternalOnly"?

Ответы [ 2 ]

6 голосов
/ 03 июня 2009

Вы можете создать собственный атрибут фильтра:

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 голос
/ 03 июня 2009

Это пример проблемы, которую можно решить с помощью решения AOP (Aspect-Oriented Programming). Для такого типа вещей я обычно рекомендую PostSharp .

По сути, PostSharp позволяет вам создавать атрибуты, которые вы можете использовать в качестве маркеров для мест в вашем коде, в которые вы хотите вставить шаблонный код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...