2011-07-12 20 views
1

こんにちは、私はこの問題を解決するための解決策を探しています。私はAsp.net mvc3でWebアプリケーションを構築しています。 私はカスタムアクションフィルタ([KeyAuthorization])を作成して、承認されたキーだけがコントローラにアクセスするようにしたいと思います。データベース内のパラメータの存在を確認するカスタムアクションフィルタ

これがそうキー場合、誰かがwww.example.com/34safd-234s/home/index

にアクセスしましょう私のデフォルトルート

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

です:34safd-234sは(正しいです許可されていない)ユーザーにはコンテンツが表示されます。それ以外の場合、Webアプリケーションは404をスローします。

どうすればこの問題を解決できますか?

がどのように構築したGUID parametreが

+0

は理にかなっています。 – frennky

+0

はいすべてのアクションで必要です、apiのようなものです – Dynamikus

+0

もう1つのアプローチはRoute Constraintを使用していますhttp://stephenwalther.com/blog/archive/2008/08/07/asp-net-mvc-tip-30-create -custom-route-constraints.aspx –

答えて

2

に存在しますが、ActionFilterAttributeを作成することによって、それを行うことができcheckesアクションフィルタすることができ、ありがとうございます。これはあなたが正しい方向に進むようにするはずです。コメント欄にあなたの検証をする必要があります。

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() { 
} 
+0

Thankyouuuu BuildStartedこれは私が探していたものです – Dynamikus

+0

喜んで助けになる:) – Buildstarted

関連する問題