2

私は、より大きな既存のイントラネットサイトに統合する新しいMVCアプリケーションを用意しました。プロダクションでのMVCページの非表示

生産時には、認証の詳細が既存のイントラネットサイトから渡されます。しかし、私は地元のフォームのログインコントロールが必要です。

これは、ソリューションが運用サーバーに展開されているときにローカルログインページを非表示にする方法が必要であることを意味します。私はそれは結局のところ、これは動作しません離れて任意のログインページ

public class AccountController : Controller 
{ 
    public ActionResult LogOn() 
    { 
     if (!System.Diagnostics.Debugger.IsAttached) 
      RedirectToAction("NotFound"); 

     return View(); 
    } 
} 

からリダイレクトするようにDebugger.IsAttachedを使用しようとしていました。私にとって謎の何らかの理由で、/Account/LogOnにナビゲートするとログインページが引き続き表示されます。

これを修正できますか?より良い方法がありますか?

+1

コンパイラのディレクティブを使用することをお勧め。そうすれば、デバッグロジックをコントローラロジックと統合する必要がありません。 – Yuck

+3

ベストコメント/ハンドルの組み合わせ。 EVAR。 –

+0

@Yuckそれは本当にいいアイデアです。あなたが正しい答えとしてそれを書いたら、私はあなたにポイントを与えたでしょう。 – fearofawhackplanet

答えて

2

は、あなたがいます「認可」属性を認識していますか?

http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx

あなたは正しい、あなたのアプリケーションは、私がセキュリティ(認証)との取引を想定して、より大きなアプリケーションの一部であることを言及?

もしそうなら、開発中に、必要に応じて異なる/特定のweb.configを作成することができます。また

<authentication mode="Forms"> 
    <forms loginUrl="~/MyDevelopment/LogIn"/> //Just for dev 
</authentication> 

、代わりにDebugger.IsAttachedの

は、私はあなたが私はおそらく、このためのカスタムアクションフィルタを使用したい

#if !DEBUG 
    RedirectToAction("NotFound"); 
#endif 
+0

フォームのloginUrlは問題ではなく、URLを介してページに直接アクセスすることはできません。 DEBUGはDebugger.IsAttachedが(何らかの理由で)私が実際に理解していないところでは動作しませんでした。私はYuckが提案したようなフィルタにこれを入れました。それは素晴らしい解決策です。 – fearofawhackplanet

4

あなたは、生産と開発の両方に別々のWeb.configファイルを持っている場合は、本番環境のWeb.configファイルで、このアクションへのアクセスを制限することができます:ちょうど好奇心の外に

<configuration> 
    <location path="/Account/LogOn"> 
     <system.web> 
     <authorization> 
      <deny users="?"/> 
     </authorization> 
     </system.web> 
    </location> 
</configuration> 
+0

これは行く方法です。また、Webアプリケーション(例えば、 'Context.IsDebuggingEnabled')のHTTPコンテキストの機能を無効にすることもできますが、web.configを使用する方がはるかに良い方法です。 –

+0

これは、アクセスが拒否され、見つからないという欠点があるという欠点があります。 – fearofawhackplanet

関連する問題