==[[ASP.NET Core]]==
[[C Sharp]] | [[ASP.NET]] | [[Razor]] |
*More information and opt-out https://aka.ms/dotnet-cli-telemetry
Resources[[R]]esources
*Core Documentation https://aka.ms/dotnet-docs
*SDK Documentation https://aka.ms/dotnet-cli-docs
*Release [[R]]elease Notes https://aka.ms/20-p2-rel-notes
*Tutorials https://aka.ms/dotnet-tutorials
!内容
|-
|[[ASP.NET ]] MVC
|MVCモデルに基づいて設計されたフレームワーク
|-
|[[ASP.NET ]] Web API
|Web経由で利用できるAPIを実装するための仕組み
|-
|Razor Pages
|MVVMパターンフレームワーク、画面中心の場合ASPMVVMパターンフレームワーク、画面中心の場合[[ASP.NET ]] MVCよりもシンプルに開発可 https://codezine.jp/article/corner/718
|-
|SignalRSignal[[R]]
|リアルタイム通信を実装するためのライブラリ、アプリ側で低レベル手続きを意識しなくてもよい
|-
|}
====[[ASP.NET ]] Web API====*[[ASP.NET ]] Web API のランタイム環境は、ASPのランタイム環境は、[[ASP.NET MVC以外のアプリケーションから利用できるように、ASP]] MVC以外のアプリケーションから利用できるように、[[ASP.NET ]] MVCランタイム環境から完全に切り離されている。
*以下の点がMVCよりも優れている
**コードと結果のシリアル化の切り離し:メソッドデータを返すだけ、メソッド内で結果をシリアル化しない
**コンテンツネゴシエーション:リクエスト元のデバイスに返されるデータのシリアル化は、フォーマッターによって処理される。送信クエリのAcceptヘッダーに基づき自動
**IIS以外でのホスティング:IIS不要、Windowsサービスやコンソールアプリケーション等でもホスティング可能IIS不要、[[Windows]]サービスやコンソールアプリケーション等でもホスティング可能
==基本==
===[[ASP.NET Core ]] Webアプリケーションテンプレート===
[[File:0252_dnetcore_template.jpg]]
====dotnet new====
*[[Visual Studio Code]]
*https://docs.microsoft.com/ja-jp/dotnet/core/tools/dotnet-new?tabs=netcore21
$ dotnet new mvc
// アクションメソッド
// publicメソッドでクライアントからのリクエストを処理
public IActionResult IAction[[R]]esult Index()
{
// アクションメソッドの戻り値は、IActionResultアクションメソッドの戻り値は、IAction[[R]]esult IActionResult result = Content("Hello [[ASP.NET Core ]] workd.");
return result;
}
====IActionResultIAction[[R]]esult====
{|class="wikitable"
!結果
!概要
|-
|ViewResultView[[R]]esult
|View()
|テンプレートに基づいてページを出力
|-
|ContentResultContent[[R]]esult
|Content()
|指定されたテキストを出力
|-
|RedirectResult[[R]]edirect[[R]]esult|Redirect[[R]]edirect()
|指定されたパスに移動
|-
|RedirectToActionResult[[R]]edirectToAction[[R]]esult|RedirectToAction[[R]]edirectToAction()
|指定されたアクションに移動
|-
|FileContentResultFileContent[[R]]esult
|File()
|指定されたバイト配列をファイルとして出力
|-
|NotFoundResultNotFound[[R]]esult
|NotFound()
|404(Not Found)エラーを出力
===ルーティング===
*プロジェクト直下のStartup.cs(Configureメソッド)で定義
public void Configure(IApplicationBuilder app, IHostingEnvironment IHostingEn[[vi]]ronment env)
{
:
app.UseMvc(routes =>
{
routes.MapRouteMap[[R]]oute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
*UseMvcは、ASPUseMvcは、[[ASP.NET ]] MVCを有効にする*UseMvcには、ルーティング設定をする、IRouteBuilderが渡されるので、新たなルートを追加できるUseMvcには、ルーティング設定をする、I[[R]]outeBuilderが渡されるので、新たなルートを追加できる
=====template=====
{|class="wikitable"
|}
===ビュー===
*出力にかかわる部分はRazorテンプレート出力にかかわる部分は[[Razor]]テンプレート(ビュー)にゆだねるべき====[[Razor]]====*HTMLにC[[HTML]]にC#などのコードを埋め込むためのテンプレートエンジン**HTMLをベース[[HTML]]をベース
**タグヘルパー
**[[C#]]構文を利用できる
*再利用の仕組み
// アクションメソッド
// publicメソッドでクライアントからのリクエストを処理
public IActionResult IAction[[R]]esult Greet()
{
// ViewBag.変数名 = 値(任意のオブジェクト)
// ViewData["変数名"] = 値(任意のオブジェクト)
ViewBag.Message = "Hello [[ASP.NET Core ]] workd.";
// テンプレートの呼び出し
====ビューの追加====
*コントローラー、アクションメソッドのコンテキストメニューから
{{ref_image dnet_add_[[File:0244_dnet_add_viewvi]]ew.jpg]]}}
@{
<p>@ViewBag.Message</p>
=====Razor構文[[Razor]]構文=====
{|class="wikitable"
!構文
*テンプレートに記述していないヘッダー・フッター
**/Views/Shared/_Layout.cshtml で定義されている
**@RenderBody[[R]]enderBody() にて出力が生成
===モデル===
*データベース、外部サービスへのアクセスはじめ、ビジネスロジックを担うデータベース、外部サービスへのアクセスはじめ、ビジネス[[ロジック]]を担う*[[ASP.NET ]] MVCでは、モデルに相当する機能はなく、モデルとして何を利用するかは開発者の自由
====Entity Framework====
*O/Rマッパーの一種[[R]]マッパーの一種
*データベース連携には欠かせない存在
====モデルクラス====
:
"ConnectionStrings": {
"MyContext": "Server=(localdb)\\mssqllocaldb;[[Database]]=QuickMaster;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
{
:
public void ConfigureServicesConfigureSer[[vi]]ces(IServiceCollection servicesISer[[vi]]ceCollection ser[[vi]]ces)
{
servicesser[[vi]]ces.AddMvc();
// コンテキストクラスを登録
servicesser[[vi]]ces.AddDbContext<MyContext>(
options => options.UseSqlServer(Configuration.GetConnectionString("MyContext")));
}
PM> Install-Package Microsoft.EntityFrameworkCore.Tools
PM> Add-Migration Initial
PM> Update-[[Database]]*SQLServerオブジェクトエクスプローラーで確認[[SQL]]Serverオブジェクトエクスプローラーで確認
[[File:0251_dnet_sqlsrv.jpg]]
===データアクセス===
this._context = context;
}
public IActionResult IAction[[R]]esult List()
{
// コンテキストからプロパティにアクセスするとすべてのレコードを取得できる
[[Razor]] |
*上記手順でビューを追加
@model IEnumerable[[IE]]numerable<QuickMaster.Models.Book>
@{
ViewData["Title"] = "List";
====Entity Frameworkを使用したビューがあるMVCコントローラー====
*Controllersフォルダのコンテキストメニュー - 追加 - コントローラー - Entity Frameworkを使用したビューがあるMVCコントローラー
*CRUD機能を備えたコントローラーが作成されるC[[R]]UD機能を備えたコントローラーが作成される
[[File:0248_dnet_sf.jpg]]
*実行
=====model => model.プロパティ名とすることでデータ型に応じて適切な形式で出力=====
**bool型ではチェックボックス
**EmailAddress/Url型ではハイパーリンクUrl型ではハイパー[[リンク]]
@Html.DisplayNameFor(model => model.Title)
=====モデルアトリビュート=====
=====表示名が表示される=====
[[File:0243_display_name.jpg]]
=====ハイパーリンクを生成ハイパー[[リンク]]を生成=====*Editアクションに対して、idパラメータとして@item.Id を渡すリンクを作成させるを渡す[[リンク]]を作成させる
<a asp-action="Edit" asp-route-id="@item.Id">Edit</a>
*以下のようなHTMLが生成される以下のような[[HTML]]が生成される <a href="/[[Books]]/Edit/1">Edit</a>
===Htmlヘルパー===
*https://tokkan.net/csharp/asp3.html
*Html.ListBox()
*Html.Password()
*Html.RadioButton[[R]]adioButton()
*Html.TextArea()
*Html.TextBox()
====Html.ActionLink====
====Html.DropDownList====
*https://docs.microsoft.com/ja-jp/aspnet/mvc/overviewover[[vi]]ew/older-versions/working-with-the-dropdownlist-box-and-jquery/using-the-dropdownlist-helper-with-aspnet-mvc
====Html.TextArea====
====モデルバインド====
*アクションメソッドでは、リクエストデータと同名の引数を用意しておくことで、対応する値を自動的に引き渡すことができる
*デフォルトで定義されたルートでは、{controller}/{action}/{id} のように定義されていて、Booksのように定義されていて、[[Books]]/Details/13 の場合、id=13 がセットされる*ルートパラメータだけでなく、クエリパラメータにも対応 /[[Books]]/Details?id=13 でも同様にアクセス可能
// GET: [[Books]]/Details/5 public async Task<IActionResultIAction[[R]]esult> Details(int? id)
{ ... }
====フォームの生成====
:
</form>
*以下のようなHTMLに展開される以下のような[[HTML]]に展開される <form action="/[[Books]]/Edit/1" method="post">
<input type="hidden" data-val="true" data-val-required="The Id field is required." id="Id" name="Id" value="1" />
<div class="form-group">
====アクションの処理====
==バンドル==
===[[ASP.NETバンドルでの相対パスを使用]]===*[[ASP.NETバンドルでの相対パスを使用]]
==WebConfig の変換==
*https://docs.microsoft.com/ja-jp/previouspre[[vi]]ous-versions/dd465326(v=vs.110)?redirectedfrom=MSDN
*変換ファイルのルート要素の開始タグで、XML変換ファイルのルート要素の開始タグで、[[XML]]-Document-Transform 名前空間を指定する <configuration xmlns:xdt="http://schemas.microsoft.com/[[XML]]-Document-Transform">*以下の例では、"SetAttributes" 変換により、値が "MyDB" の属性 "name" を "Match" ロケーターが検出した場合にのみ "connectionString" の値に"ReleaseSQLServerRelease[[SQL]]Server" を使用するよう変更されます
<connectionStrings>
<add name="MyDB"
connectionString="Data Source=ReleaseSQLServerRelease[[SQL]]Server;Initial Catalog=MyReleaseDB;Integrated Security=True"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
*以下の例では、"Replace[[R]]eplace" 変換により Web.config ファイルの <customErrors> セクション全体が置換されます。 <customErrors defaultRedirectdefault[[R]]edirect="GenericError.htm" mode="RemoteOnly[[R]]emoteOnly" xdt:Transform="Replace[[R]]eplace">
<error statusCode="500" redirect="InternalError.htm"/>
</customErrors>