Пользовательский ActionFilter для проверки существования параметра в базе данных - PullRequest
1 голос
/ 12 июля 2011

Привет! Я ищу решение для решения этой проблемы. Я создаю веб-приложение с Asp.net mvc3. Я хочу сделать собственный фильтр действий ([KeyAuthorization]), чтобы только авторизованный ключ имел доступ к контроллерам.

Это мой маршрут по умолчанию

routes.MapRoute(
                "Default", // Route name
               "{guid}/{controller}/{action}", // URL with parameters
               new { guid = UrlParameter.Optional, controller = "Home", action = "Index", }

Допустим, кто-то имеет доступ к www.example.com / 34safd-234s / home / index

если ключ: 34safd-234s правильный (авторизованный), тогда пользователь увидит контент, иначе веб-приложение выдаст 404.

Как этого добиться?

Спасибо,

Как мне создать и выполнить фильтр действий, который проверяет наличие параметра guid в

1 Ответ

2 голосов
/ 12 июля 2011

Вы можете сделать это, создав ActionFilterAttribute. Это должно привести вас в правильном направлении. Вам нужно будет сделать свою проверку там, где прокомментировано.

public class KeyAuthorizationAttribute : ActionFilterAttribute {
    public override void OnActionExecuting(ActionExecutingContext filterContext) {
        var guidValue = filterContext.RouteData.Values["guid"];
        if (guidValue != null) {
            Guid guid = new Guid(guidValue.ToString());
            bool notValid = true;
            //do validation
            //set notValid = false if authorization passes             

            if (notValid) {
                filterContext.Result = new HttpNotFoundResult();
            }
        }
    }
}

Затем вы примените это к своему действию.

[KeyAuthorization]
public ActionResult Index() {
}
...