2012-07-07 9 views
5

[RequireHttps]がたくさんあるMVC2ウェブサイトがあります。デバッグ中に[RequireHttps]をすべてのメソッドで無効にする方法はありますか?

私はそれをデバッグするときに、私は別の場所(コントローラ)でそれらの多くをコメントする必要があります。そして、コードが準備ができたら、私はすべてのコメントを削除する必要があります。

だから、時間がかかり、時々私は[RequireHttps]のコメントを解除するのを忘れ:)

私の質問は、この問題を解決するためのベストプラクティスであるのですか?

ありがとうございました!

+1

- なぜあなたは場所でそれらをデバッグすることはできませんか? –

+2

ビルドインVS Webサーバーを使用している場合は、IIS Expressに切り替えて、SSLを有効にしてデバッグできます。http://learn.iis.net/page.aspx/901/iis-express-faq/ –

+0

@MichaelEdenfield:あなたのコメントは答えに値すると思います。最高の答えかもしれません。それは実際に質問に答えるものではありませんが、根本的な問題を解決するかもしれないと思います。 – comecme

答えて

3

を:

その後、あなたは:

#if RELEASE 
    [RequireHttps] 
#endif 
void methodHere() 
{ 
... 
} 
1

#if RELEASE ... #endif構造使用します。私は#if (C# Reference)を使用してデバッグを持っていたし、設定を解除したい

#if RELEASE 
    [RequireHttps] 
#endif 
void YourMethod() 
{ 
    ... 
} 
8

をあなたはしたくない場合タイプごとに#ifステートメントを使用すると、デバッグビルドではノーオペレーションである新しいアトリビュートを作成することができ、release buにはRequireHttpsのシンプルなサブクラスを作成できますILDS:

#if DEBUG 
public class ReleaseRequireHttpsAttribute : Attribute 
{ 
    // no-op 
} 
#elif 
public class ReleaseRequireHttpsAttribute : RequireHttpsAttribute 
{ 
    // does the same thing as RequireHttpsAttribute 
} 
#endif 

そして、単に見つけると置換[ReleaseRequireHttps]ですべての[RequireHttps]をして、新しいメソッドのためにそれを使用します。

2

以下は、機能アップDRYにあなたをできるようにし、プリプロセッサディレクティブを使用してコントローラを汚染する必要性を防ぐことができます:あなたはこれを解決するための「ベストプラクティス」について尋ねられたので

public class CustomRequireHttpsAttribute : RequireHttpsAttribute 
{ 
    /* override appropriate method with preprocessor directives */ 
} 

[CustomRequireHttps] 
public ActionResult Foo(string foo) { /* ... */ } 

[CustomRequireHttps] 
public ActionResult Bar(string bar) { /* ... */ } 
4

この場合のベストプラクティスは、属性をそのままにして、展開するのとまったく同じコードをデバッグすることです。他の答え(すべてうまくいく)は、あなたがコードをデバッグしていることを意味し、展開する前にコードを変更することは意味がありません。

IIS Expressを使用すると、SSL経由でWebプロジェクトをデバッグするのは簡単です。これは、Visual Studio 2010 Webサーバーの代わりに使用されますが、セキュアなHTTPサポートを含むIISのほとんどの機能が含まれています。詳しい情報はここで見つけることができます:一度インストール

http://learn.iis.net/page.aspx/901/iis-express-faq/

、あなたは、IIS Expressを使用するようにプロジェクトを切り替えるIIS Express設定にHTTPSバインドを設定し、通常どおりステップ実行することができます。

0

ここでのVisual Studioデバッガの下で実行しない限り、HTTPS接続を必要とするカスタム属性の作業バージョンがあります:

ちょうど好奇心のうち
/// <summary> 
/// Requires HTTPS connection unless running under Visual Studio debugger. 
/// </summary> 
public class RemoteRequireHttpsAttribute : RequireHttpsAttribute 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (filterContext != null 
      && filterContext.HttpContext != null 
      && filterContext.HttpContext.Request.IsLocal) 
      return; 

     base.OnAuthorization(filterContext); 
    } 
} 
関連する問題