MVC6

MVC6関連

MVC6

Application Initialization Module (IIS)

IISにて、Application Initialization Moduleを利用しアプリをプリロードする設定メモ。 詳細は https://www.iis.net/configreference/system.webserver/applicationinitialization 1.サーバーの役割にてApplication Initialization Moduleをインストール 2.アプリケーションプール詳細設定にて、開始モードをAlwaysRunningに変更 3.サイト詳細設定にて、有効化されたプリロードをTrueに変更 4.Web.Configにて動作を設定 <system.webServer> ... <applicationInitialization doAppInitAfterRestart="true" skipManagedModules="true" remapManagedRequestsTo="Loading.html"/> <add

MVC6

Mac・LinuxでMVC6(asp.net5)を動かす

この記事はもう過去のプレビュー版での話になってしまったので、現在は https://docs.microsoft.com/ja-jp/dotnet/core/linux-prerequisites?tabs=netcore2x#install-net-core-for-debian-8-or-debian-9-64-bit を参照のこと。 折角クロスプラットフォームになったdnx。実際にMac・Linuxで動かしてみた。 環境構築 Linux編 今回は、Debian8での構築。 Monoのインストール 普通にapt-getでmonoはインストールできるけれど、現在mono3.xになってしまう。MVC6を動かすには、mono4.xが必要とのことなので、リポジトリを登録して、apt-getする。 Monoのサイトできちんとした説明があるので詳細はWebで! http://www.mono-project.com/docs/getting-started/install/linux/ # apt-key adv --keyserver keyserver.ubuntu.

MVC6

MVC6で認証処理の実装

基本的な考え方はMVC5と同じだが、MVC6で認証もサービスになったので忘れないようにメモ。 ちなみに、VS2015でテンプレートを利用すれば予め認証関連を自動生成してくれる...が業務アプリではなかなか使えないのが悲しいなぁ。 参考URL:https://github.com/leastprivilege/AspNet5AuthorizationPlayground Startup.cs public class Startup { public void ConfigureServices(IServiceCollection services) { // 認証されたUser以外はアクセス禁止 --> var defaultPolicy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); services.AddMvc(setup => { setup.Filters.Add(new AuthorizeFilter(defaultPolicy)); }); // <-- 認証されたUser以外はアクセス禁止 // 必要があればリソースに対するアクセス権(

MVC6

Htmlヘルパでdata-xxxのようなHTML5の属性を追加する

Htmlヘルパで属性を追加する場合 new { @class = "ui-grid-editor", id = "hoge", })' のようにオブジェクトを生成してパラメータとする。その際予約語については@でエスケープすればよいが、data-name のような属性名は、.NETの構文では書くことができない。 Razorでは、data_name とアンダーバーで書けば、data-name に変換してくれる。 new { ng_class = "colt3", @class = "ui-grid-editor", ng_model = "MODEL_COL_FIELD", })' の例だと na-class = "

MVC6

MVC6でMicrosoft.Extensions.Configurationから設定取得

MVC6では、Microsoft.Extensions.Configurationでappsettings.jsonに書かれた設定を利用している。これを業務ロジック側でも利用する方法。 まずは、設定格納のオブジェクトを用意しない方法。 Startup.cs public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddApplicationInsightsTelemetry(Configuration); services.AddMvc(); //コントローラ側で設定が利用できるように services.AddInstance<IConfiguration>(Configuration); } appsettings.json 設定を追加 { "ManekiNeko": { "Settings": { "Pager": { "A": 10, "B": 10 } } } } コントローラ public class CodUnitController

MVC6

Rasorテンプレートでコード記載でハマる

Rasorテンプレートで、MVCのViewのテンプレートを生成していてちょいハマる。以下のようにまず@に関しては、@@でエスケープ(メールアドレスなんかは何もしなくてもOKだけど) @@(Html .Grid(Model) .Build(columns => { @foreach (var item in Model.Cloumns) { columns.Add(model => model.@item.PropertyName).Titled("@item.DisplayName"); } @if (!String.IsNullOrEmpty(Model.PrimaryId)) { columns.Add(model => model.Uid).Titled(""

MVC6

Ajax用のHtml.AntiForgeryToken()のその後

Html.AntiForgeryToken()と共存できないのは、ちと辛いのでAntiForgeryWorkerのソースなど見ながら検討をはじめて見ると「なんだ、こんなことする必要なかったんだ(汗)」ってことに。 結局、Html.AntiForgeryToken()とValidateAntiForgeryToken属性の組み合わせも、Formの_RequestVerificationTokenパラメータの値を利用しているだけ。であれば、JavascriptでPostする際に、Html.AntiForgeryToken()で作成した_RequestVerificationTokenの値を送信してあげるだけで良いことに気がついた。 なので、View側はFormがあればその中に、Formがなければ適当なところに @Html.AntiForgeryToken() を普通に書いて、コントローラ側のアクションメソッドに [HttpPost] [ValidateAntiForgeryToken] public ActionResult Hoge(RequestArgs args) { Javascript側では //送信パラメータ var data = { ID: $('#id').val(), Code: $('#

MVC6

Ajax用のHtml.AntiForgeryToken()拡張作った

CSRF対策として.NET MVC5では、ViewのFormの近くに@Html.AntiForgeryToken()を配置して、コントローラ側でアクションメソッドにValidateAntiForgeryToken属性を付与すればよいだけという手軽さなんだけれど、これformじゃないとダメでAjaxだと同じノリで実装することができない。@Ajax.ActionLinkを利用すればよいそうだが、単純な処理でしか使えそうにないし(汗) そもそも、AntiForgeryTokenを生成する仕組みはあるわけなので、ちょろっと実装してみることにした。 ヘルパーの作成 まずView側では、@Html.AjaxAntiForgeryToken()と書きたいので、ヘルパーを作成。 AntiForgery.GetTokens()で、クッキー用とフォーム用の認証トークンを生成し、クッキーとフォームに認証トークンを埋め込むだけ。 public static class AjaxHelper { /// <summary> /// Ajax用のAntiForgeryTokenを埋め込む /// </summary> /// <param name="helper"

MVC6

Bootstrap3で404エラー

フォントで追加になったwoff2のMIME_TYPEが解釈できず、404エラーが発生する場合(ちゃんと開発ツールでエラー確認しないとわからないけど) IISだったら web.config <system.webServer> <staticContent> <remove fileExtension=".woff" /> <remove fileExtension=".woff2" /> <mimeMap fileExtension=".woff" mimeType="application/font-woff" /> <mimeMap fileExtension="