質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

3回答

1307閲覧

asp.net core razorpagesでユーザーも編集できる文言の設定はどこに保存するべき

nomori7010

総合スコア36

.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2021/08/17 02:57

編集2021/08/17 07:23

開発環境

OS

Windows

Visual Studio,

Visual Studio Professional 2019

Core のバージョン

.netcore 3.1

内容

.netcore razorpagesでWebアプリケーションを作成しています。
このアプリケーションではメールの送信を行いますが、メール作成時に既定でセットされる文言を設定できるようにします。
それらの設定はユーザーでも編集ができるようにしますが、こういった設定情報はどこに保存するのが適しているのでしょうか。

  • データベース
  • appsettings.json
  • 独自のxmlファイル

を検討しました。

それほどの件数ではないデータを保存するのでデータベースでは大仰かな、と思いました。
appsettings.jsonはユーザーからの編集ができないほうが望ましいような記事をネット上で散見されたので、あまり望ましくないのかな、と思いました。
独自のxmlファイルの場合はそのファイル自体の適切な保存場所がわかりません。

どういった方法がベストプラクティスなのか、ご教授いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/08/17 03:04

ASP.NET のタグをつけてください。 開発環境を質問欄を編集して追記してください。OS, Visual Studio, Core のバージョンなど。
BluOxy

2021/08/17 04:32 編集

修正依頼ではなく回答になってしまったため、削除
退会済みユーザー

退会済みユーザー

2021/08/17 04:35

マルチポスト https://ja.stackoverflow.com/questions/80861/asp-net-core-razorpages%e3%81%a7%e3%83%a6%e3%83%bc%e3%82%b6%e3%83%bc%e3%82%82%e7%b7%a8%e9%9b%86%e3%81%a7%e3%81%8d%e3%82%8b%e6%96%87%e8%a8%80%e3%81%ae%e8%a8%ad%e5%ae%9a%e3%81%af%e3%81%a9%e3%81%93%e3%81%ab%e4%bf%9d%e5%ad%98%e3%81%99%e3%82%8b%e3%81%b9%e3%81%8d ここにもルールがありますので守ってください→ https://teratail.com/help#posted-otherservice マルチポストの意味が分からなければそれをキーワードにググってください。いろいろ意見はあるようですが決して歓迎されることではありません。
BluOxy

2021/08/17 04:55

その設定情報はアカウントと紐づいていますか。今紐づいていなかったとして、紐づける想定でいますか。 もし紐づいているか、紐づける想定でいるなら SurferOnWww さんの回答の通りデータベースで持たせるべきと思います。
nomori7010

2021/08/17 07:21

説明が不足しておりすみません。 設定情報はアカウントとは紐付いていません。 全般的な設定になります。 マルチポスト失礼しました。 あちらに誤って投稿して、こちらに投稿し直したときに、削除し忘れていました。 あちらは削除しました。
退会済みユーザー

退会済みユーザー

2021/08/17 07:28

> 設定情報はアカウントとは紐付いていません。 回答に書きましたが、例えばメールの基本文は一つしかなくても、ユーザーが 1,000 人いるとすると 1,000 の設定ができるわけで、しかもそれを各ユーザーに紐づけなければならないはずです。そこはどうするのですか? それを回答のコメント欄に書いてください。
BluOxy

2021/08/17 07:43 編集

全般的な設定 という部分がまだ曖昧ですね。何に関する全般的な設定なのでしょうか。 例えば、Webページのみで完結する全般的な設定を定義したいならCookieやウェブストレージを利用する方法が使えるかもしれません。それならアカウントに紐づいていないとはいえ、ユーザが弄れて良いとは思います。 しかし、それ等の設定はブラウザが初期化されたときに削除されます。また、アカウント依存ではないので、1つのブラウザで特定のアカウントにログインし、別のアカウントでログインしなおしたときにまったく同じ設定が適用されることになります
nomori7010

2021/08/17 08:00

具体例をSurferOnWwwさんの回答にコメントさせて頂きました。
guest

回答3

0

そのWebアプリはスタートページなどで「ようこそ」という挨拶文を表示するアプリだとします。

この挨拶文はどのユーザーにも同じものが表示されます。
その「ようこそ」という文字列を設定値から取得するような仕様です。
その設定値を、Webアプリの設定画面などからも更新できるようにする、といった利用を想定していました。

上記のような要件ならばその文字列はブラウザだけで完結する情報ですから Web Storage API を使うと良いかと思います。

Web Storage は JavaScript の API ですから、JavaScript で設定した値を取得・保存するソースコードを記述する必要があります。

ASP.NET Core では Razor を使ったビューに script タグを使って外部の JavaScript ファイルを読み込ませるか、もしくはタグ内に JavaScript のソースコードを書くことで、JavaScript が動作することを確認できます。

また、ASP.NET Core は JavaScript を Bundle, Minify する機能がありますから、それを利用しても同様に動作させることができます。

投稿2021/08/17 08:25

編集2021/08/17 08:39
BluOxy

総合スコア2663

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BluOxy

2021/08/17 08:42

(Webアプリの設定画面"など"からも、という部分が少し引っかかります)
guest

0

このアプリケーションではメールの送信を行いますが、メール作成時に既定でセットされる文言を設定できるようにします。
それらの設定はユーザーでも編集ができるようにしますが、こういった設定情報はどこに保存するのが適しているのでしょうか。

・データベース
・appsettings.json
・独自のxmlファイル

「設定はユーザーでも編集ができる」ということは、編集後の各ユーザー個別の内容を保存しておく必要があるのですよね? であれば、上の 3 つの中では「データベース」以外にないと思います。

例えばメールの基本文は一つしかなくても、ユーザーが 1,000 人いるとすると 1,000 の設定ができるわけで、しかもそれを各ユーザーに紐づけなければならないはずです。

とすると、まず appsettings.json は選択肢から外れます。独自のxmlファイルも 1,000 人の各ユーザーに紐づけた 1,000 の設定を保存するのは無理があります。

なので、それ用に DB にテーブルを作成して、それを認証システムのユーザー情報と関連づけて使うのが良さそうです。

その具体例は以下の記事が参考になると思います。

ASP.NET Identity にエンティティ追加
http://surferonwww.info/BlogEngine/post/2021/06/23/how-to-add-entity-to-aspnet-identity.aspx

投稿2021/08/17 03:57

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nomori7010

2021/08/17 07:27

ご回答ありがとうございます。 質問が仕方が不明確ですみませんでした。 ユーザーは紐付かないグローバルな設定なので、データベースではない方法はとれないか、と目論んでおります。
退会済みユーザー

退会済みユーザー

2021/08/17 07:35

> ユーザーは紐付かないグローバルな設定なので、 最初の質問に、 > それらの設定はユーザーでも編集ができるようにします と書いてあったのですが、矛盾しませんか? 「ユーザーでも編集ができる」のであれば、上にも書いたように、ユーザーが 1,000 人いるとするとユーザーの編集結果は 1,000 できるわけで、しかもそれを各ユーザーに紐づけなければならないはずです。そこはどうするのですか?
nomori7010

2021/08/17 07:57

コメントありがとうございます。 この場合のユーザーは「アプリケーションの管理設定を行うユーザー」と捉えていただけまでしょうか。 設定したい内容の具体例としては次のとおりです。 そのWebアプリはスタートページなどで「ようこそ」という挨拶文を表示するアプリだとします。 この挨拶文はどのユーザーにも同じものが表示されます。 その「ようこそ」という文字列を設定値から取得するような仕様です。 その設定値を、Webアプリの設定画面などからも更新できるようにする、といった利用を想定していました。
退会済みユーザー

退会済みユーザー

2021/08/17 08:06

> この場合のユーザーは「アプリケーションの管理設定を行うユーザー」と捉えていただけまでしょうか。 それは管理者と書くべきです。さらにその管理者がどういう権限を持っていてどういうことができるかも詳しく書くべきです。
nomori7010

2021/08/17 08:36

> さらにその管理者がどういう権限を持っていてどういうことができるかも詳しく書くべきです。 一般的に、こういう場合はこうすべき、といった回答があるものと、安易に期待しておりました。 そういった事についてまで考えが及んでおらずすみませんでした。
guest

0

自己解決

MyApp.configというXMLファイルを追加して、このファイルを読み書きするクラスを作成して実現させました。

投稿2021/08/17 08:45

nomori7010

総合スコア36

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BluOxy

2021/08/17 08:58

サーバーアプリケーション上でデータベースとxmlファイルという2つのデータストアを管理する方が大仰に感じます。分ける必要性がないので。それなら、データベースだけで管理する方がシンプルだと思います。
nomori7010

2021/08/17 09:09

ありがとうございます。そちらの方向でも考えてみようと思います。
退会済みユーザー

退会済みユーザー

2021/08/17 09:40

そういうことで解決できるなら最初からその方向で進めればよかったのでは? 他人に聞くなら他人の時間と労力を無駄にしないよう配慮いただきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問