[解決済み] ASP.NET MVC 本番環境下での RequireHttps の利用について
質問
私は RequireHttpsAttribute を使用して、安全でない HTTP リクエストがアクションメソッドに送信されるのを防ぎたい。
C#
[RequireHttps] //apply to all actions in controller
public class SomeController
{
[RequireHttps] //apply to this action only
public ActionResult SomeAction()
{
...
}
}
VB
<RequireHttps()> _
Public Class SomeController
<RequireHttps()> _
Public Function SomeAction() As ActionResult
...
End Function
End Class
残念ながら、ASP.NET Development Server は HTTPS をサポートしていません。
ASP.NET MVC アプリケーションを本番環境に公開するときは RequireHttps を使用し、ASP.NET Development Server 上の開発用ワークステーションで実行するときは使用しないようにするには、どうすればよいでしょうか。
どのように解決するのですか?
開発用ワークステーションで Release ビルドを実行する場合、これは役に立ちませんが、条件付きコンパイルで解決できるかもしれません...。
#if !DEBUG
[RequireHttps] //apply to all actions in controller
#endif
public class SomeController
{
//... or ...
#if !DEBUG
[RequireHttps] //apply to this action only
#endif
public ActionResult SomeAction()
{
}
}
更新情報
Visual Basicでは、属性は技術的には適用する定義と同じ行に含まれます。行の中に条件付きコンパイル文を置くことはできないので、関数宣言を2回書かざるを得ません - 属性付きと属性なしの2回です。しかし、醜さを気にしないのであれば、これは機能します。
#If Not Debug Then
<RequireHttps()> _
Function SomeAction() As ActionResult
#Else
Function SomeAction() As ActionResult
#End If
...
End Function
更新情報2
何人かの人が
RequireHttpsAttribute
からの派生に言及した人が何人かいましたが、例を示さなかったので、ここで一つ紹介します。このアプローチは条件付きコンパイルのアプローチよりもずっとクリーンだと思いますし、あなたの立場では私の好みでしょう。
免責事項: 私はこのコードを少しもテストしていませんし、私の VB はかなり錆びついています。私が知っているのは、これがコンパイルできるということだけです。私は、spot、queen3、および Lance Fisher の提案に基づいてこれを書きました。もしうまくいかなくても、少なくとも一般的なアイデアを伝え、出発点を与えてくれるはずです。
Public Class RemoteRequireHttpsAttribute
Inherits System.Web.Mvc.RequireHttpsAttribute
Public Overrides Sub OnAuthorization(ByVal filterContext As _
System.Web.Mvc.AuthorizationContext)
If IsNothing(filterContext) Then
Throw New ArgumentNullException("filterContext")
End If
If Not IsNothing(filterContext.HttpContext) AndAlso _
filterContext.HttpContext.Request.IsLocal Then
Return
End If
MyBase.OnAuthorization(filterContext)
End Sub
End Class
基本的に、新しい属性は、現在のリクエストがローカルである場合(つまり、localhostを通してサイトにアクセスしている)、デフォルトのSSL認証コードを実行する代わりに、終了するだけです。このように使うことができます。
<RemoteRequireHttps()> _
Public Class SomeController
<RemoteRequireHttps()> _
Public Function SomeAction() As ActionResult
...
End Function
End Class
かなりすっきりしましたね。私の未試験のコードが実際に動作することを条件とします。
関連
-
[解決済み] ASP.NET WebサイトとASP.NET Webアプリケーションのどちらを選ぶか?
-
[解決済み] ファイルアップロード ASP.NET MVC 3.0
-
[解決済み] ASP.NET MVC Frameworkで複数のサブミットボタンを処理する方法は?
-
[解決済み] ASP.NET MVCでenumからドロップダウンリストを作成するにはどうすればよいですか?
-
[解決済み] ASP.NET MVC - カスタムIIdentityまたはIPrincipalの設定
-
[解決済み] ASP.NET MVCでビューをコンパイルする
-
[解決済み] ASP.Net MVCのmodelStateからすべてのエラーを取得する方法は?
-
[解決済み】jQuery Ajaxの呼び出しとHtml.AntiForgeryToken()について)
-
[解決済み] ソートロジックは、モデル、ビュー、コントローラのいずれに配置するのがよいのでしょうか?[クローズド]
-
[解決済み] ASP.NET MVC Html.ActionLinkにアンカータグを含める
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Kendo UI MVC用パスワードテキストボックス
-
[解決済み] コントローラ '...' でパブリックアクションメソッド '...' が見つかりませんでした。
-
[解決済み] RedirectToActionでURLが変更されない、またはIndexビューに移動しない
-
[解決済み] 修正方法: ハンドラ "PageHandlerFactory-Integrated" のモジュールリストに "ManagedPipelineHandler" という不正なモジュールが含まれています。
-
[解決済み】1つのビューに複数のモデルを表示する
-
[解決済み】ASP.NET MVCのフォームでチェックボックスを処理するにはどうすればよいですか?
-
[解決済み】MVC4 DataType.Date EditorForがChromeで日付の値を表示しない、Internet Explorerでは問題なし。
-
[解決済み] ASP.Net MVCでRequest on Controllerをモック化する方法とは?
-
[解決済み] 型名または名前空間名 'DbContext' が見つかりませんでした [閉鎖]。
-
[解決済み] ASP.NET MVC 1でHttpContextBaseからHttpContextオブジェクトを取得するにはどうすればよいですか?