Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9738

つくるオーオース MVC編

$
0
0

はじめに

この記事では.NET Core 3.1をつかってオーオースを学習する方法を書いてみます。

実行環境

下記バージョンで動作確認しています。
- MacOS
- .NET Core 3.1

% dotnet --version
3.1.101

学習方針

コマンドプロンプトから実行する事で、Windows、Linuxにおいてもそのままできると思います。

% mkdir myop
% cd myop
% dotnet new mvc

必要なツールをインストールします。

% dotnet tool install --global dotnet-ef
% dotnet tool install --global dotnet-aspnet-codegenerator
% dotnet tool list --global

必要なパッケージをインストールします。

% dotnet add package Microsoft.EntityFrameworkCore.Sqlite
% dotnet add package Microsoft.EntityFrameworkCore.Design
% dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
% dotnet add package Microsoft.EntityFrameworkCore.SqlServer

Clients、Tokens、Usersモデルを作成します。

Models/Tables.cs
usingSystem;usingSystem.ComponentModel;usingSystem.Collections.Generic;usingMicrosoft.EntityFrameworkCore;namespacemyop.Models{publicclassmyopContext:DbContext{//        public myopContext (DbContextOptions options) : base(options) {}publicDbSet<Client>Clients{get;set;}publicDbSet<Token>Tokens{get;set;}publicDbSet<User>Users{get;set;}protectedoverridevoidOnConfiguring(DbContextOptionsBuilderoptions)=>options.UseSqlite("Data Source=myop.db");}publicclassClient{[DisplayName("client_id")]publicstringClientId{get;set;}[DisplayName("client_secret")]publicstringClientSecret{get;set;}[DisplayName("access_type")]publicstringAccessType{get;set;}[DisplayName("redirect_uri")]publicstringRedirectUri{get;set;}[DisplayName("grant_type")]publicstringGrantType{get;set;}[DisplayName("allowed_scope")]publicstringAllowedScope{get;set;}}publicclassToken{[DisplayName("user_id")]publicstringId{get;set;}[DisplayName("access_token")]publicstringAccessToken{get;set;}[DisplayName("expires_in")]publicintExpiresIn{get;set;}[DisplayName("token_type")]publicstringTokenType{get;set;}[DisplayName("scope")]publicstringScope{get;set;}[DisplayName("iat")]publicDateTimeIat{get;set;}}publicclassUser{[DisplayName("user_id")]publicstringId{get;set;}[DisplayName("password")]publicstringPassword{get;set;}}}

モデルからデータベースを生成します。今回データベースにはSQLiteを使います。

% dotnet ef migrations add InitialCreate
% dotnet ef database update

テスト用なのでポート番号は5000のみで良いと思います。

Properties/launchSetting.json
{"iisSettings":{"windowsAuthentication":false,"anonymousAuthentication":true,"iisExpress":{"applicationUrl":"http://localhost:38239","sslPort":44320}},"profiles":{"IIS Express":{"commandName":"IISExpress","launchBrowser":true,"environmentVariables":{"ASPNETCORE_ENVIRONMENT":"Development"}},"myop":{"commandName":"Project","launchBrowser":true,"applicationUrl":"http://localhost:5000","environmentVariables":{"ASPNETCORE_ENVIRONMENT":"Development"}}}}

スキャフォールドでデータベースを確認してみます。

% dotnet aspnet-codegenerator controller -name ClientsController -m Client -dc myopContext --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries

% dotnet aspnet-codegenerator controller -name TokensController -m Token -dc myopContext --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries

% dotnet aspnet-codegenerator controller -name UsersController -m User -dc myopContext --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries

ソースコードを一部修正して実行します。これでClients、Tokens、UsersがMVCで登録できます。
http://localhost:5000/Clients/
http://localhost:5000/Tokens/
http://localhost:5000/Users/

Startup.cs
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;usingMicrosoft.AspNetCore.Builder;usingMicrosoft.AspNetCore.Hosting;usingMicrosoft.AspNetCore.HttpsPolicy;usingMicrosoft.Extensions.Configuration;usingMicrosoft.Extensions.DependencyInjection;usingMicrosoft.Extensions.Hosting;usingmyop.Models;usingMicrosoft.EntityFrameworkCore;namespacemyop{publicclassStartup{publicStartup(IConfigurationconfiguration){Configuration=configuration;}publicIConfigurationConfiguration{get;}// This method gets called by the runtime. Use this method to add services to the container.publicvoidConfigureServices(IServiceCollectionservices){services.AddDbContext<myopContext>(options=>options.UseSqlite("Data Source=myop.db"));services.AddControllersWithViews();}(省略)
Models/Tables.cs
usingSystem;usingSystem.ComponentModel;usingSystem.Collections.Generic;usingMicrosoft.EntityFrameworkCore;namespacemyop.Models{publicclassmyopContext:DbContext{publicmyopContext(DbContextOptionsoptions):base(options){}publicDbSet<Client>Clients{get;set;}publicDbSet<Token>Tokens{get;set;}publicDbSet<User>Users{get;set;}//        protected override void OnConfiguring(DbContextOptionsBuilder options)//            => options.UseSqlite("Data Source=myop.db");}publicclassClient{[DisplayName("client_id")]publicstringClientId{get;set;}[DisplayName("client_secret")]publicstringClientSecret{get;set;}[DisplayName("access_type")]publicstringAccessType{get;set;}[DisplayName("redirect_uri")]publicstringRedirectUri{get;set;}[DisplayName("grant_type")]publicstringGrantType{get;set;}[DisplayName("allowed_scope")]publicstringAllowedScope{get;set;}}publicclassToken{[DisplayName("user_id")]publicstringId{get;set;}[DisplayName("access_token")]publicstringAccessToken{get;set;}[DisplayName("expires_in")]publicintExpiresIn{get;set;}[DisplayName("token_type")]publicstringTokenType{get;set;}[DisplayName("scope")]publicstringScope{get;set;}[DisplayName("iat")]publicDateTimeIat{get;set;}}publicclassUser{[DisplayName("user_id")]publicstringId{get;set;}[DisplayName("password")]publicstringPassword{get;set;}}}

Viewing all articles
Browse latest Browse all 9738

Trending Articles