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

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

新規登録して質問してみよう
ただいま回答率
85.37%
C#

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

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

ASP.NET

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

Q&A

解決済

1回答

9801閲覧

【C#】ASP.Net MVCを使ったログイン機能実装でリダイレクトエラーが発生する

Mr.sijimi

総合スコア21

C#

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

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

ASP.NET

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

0グッド

0クリップ

投稿2020/08/04 01:50

編集2020/08/04 06:19

前提・実現したいこと

参考サイトに従い、Webサイトのログイン機能の実装を試みています。

記載の修正箇所以外の自動生成されたファイルや、フォルダは触っておりません。
コピペですが、自身の修正または追加したコード内容を提示します。

参考サイト:【初心者向け】ASP.NET MVC5 ログイン機能の実装方法

config

1//プロジェクトのWeb.config 2 3// 以前自動生成箇所 4// ・ 5// ・ 6// ・ 7 <system.web> 8 <authentication mode="None" /> 9 <compilation debug="true" targetFramework="4.5"> 10 <assemblies> 11 <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 12 </assemblies> 13 </compilation> 14 <httpRuntime targetFramework="4.5" /> 15 <!-- 認証設定--> 16 <authentication mode ="Forms"> 17 <forms loginUrl="/Auth/Login" /> 18 </authentication> 19 <!-- 承認設定--> 20 <authentication> 21 <deny users="?" /> 22 </authentication> 23 <httpModules> 24 <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" /> 25 </httpModules> 26 </system.web> 27// ・ 28// ・ 29// ・ 30// 以降自動生成箇所

C#

1//Models内に作成したAuthModel.cs 2 3using System.ComponentModel.DataAnnotations; 4 5namespace TestWebSite1.Models 6{ 7 public class AuthModel 8 { 9 [Display(Name = "ユーザーID")] 10 [Required(ErrorMessage ="ユーザーIDは必須入力です")] 11 public string Id { get; set; } 12 13 [Display(Name = "パスワード")] 14 [Required(ErrorMessage = "パスワードは必須入力です")] 15 public string Password { get; set; } 16 } 17}

C#

1// Views\Auth内に作成したLogin.cshtml 2 3@model TestWebSite1.Models.AuthModel 4@{ 5 ViewBag.Title = "ログイン"; 6} 7<h2>@ViewBag.Title</h2> 8@using (@Html.BeginForm()) 9{ 10 <div class="form-item"> 11 @Html.LabelFor(model =>model.Id) 12 @Html.TextBoxFor(model => model.Id) 13 </div> 14 <div class="form-item"> 15 @Html.LabelFor(model => model.Password) 16 @Html.TextBoxFor(model => model.Password) 17 </div> 18 <div class="button-panel"> 19 <input type="submit" class="button" value="ログイン" /> 20 </div> 21 <br /> 22 <label style="color:#ff0000">@Html.ValidationSummary()</label>

C#

1// Views\Shared内にある_Layout.cshtml 2 3 <div class="navbar-header"> 4 <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> 5 <span class="icon-bar"></span> 6 <span class="icon-bar"></span> 7 <span class="icon-bar"></span> 8 </button> 9 @Html.ActionLink("TestLogin", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" }) 10 </div> 11 <div class="navbar-collapse collapse"> 12 <ul class="nav navbar-nav"> 13 <li>@Html.ActionLink("ホーム", "Index", "Home")</li> 14 <li>@Html.ActionLink("詳細", "About", "Home")</li> 15 <li>@Html.ActionLink("連絡先", "Contact", "Home")</li> 16 </ul> 17 @if (Request.IsAuthenticated) 18 { 19 <ul class="nav navbar-nav navbar-right"> 20 <li>@Html.ActionLink("ログアウト","LogOut","Auth")</li> 21 </ul> 22 } 23 else 24 { 25 <ul class="nav navbar-nav navbar-right"> 26 <li>@Html.ActionLink("ログイン","Login","Auth")</li> 27 </ul> 28 } 29 </div>

C#

1// Contollers内に作成したAuthController 2 3using System.Web.Mvc; 4using System.Web.Security; 5using TestWebSite1.Models; 6 7namespace TestWebSite1.Controllers 8{ 9 public class AuthController : Controller 10 { 11 /// <summary> 12 /// ログイン表示 13 /// </summary> 14 /// <returns></returns> 15 [HttpGet] 16 public ActionResult Login() 17 { 18 return View(); 19 } 20 21 /// <summary> 22 /// ログイン処理 23 /// </summary> 24 /// <param name="model"></param> 25 /// <returns></returns> 26 [HttpPost] 27 public ActionResult Login(AuthModel model) 28 { 29 // サンプルの為、ハードコーティング 30 if(model.Id == "TestUser1" && model.Password == "TestPass1234") 31 { 32 // ユーザー認証 失敗 33 FormsAuthentication.SetAuthCookie(model.Id, true); 34 return RedirectToAction("Index", "Home"); 35 } 36 else 37 { 38 // ユーザー認証 失敗 39 this.ModelState.AddModelError(string.Empty, "指定されたユーザー名またはパスワードが正しくありません。"); 40 return this.View(model); 41 } 42 } 43 44 /// <summary> 45 /// ログアウト処理 46 /// </summary> 47 /// <returns></returns> 48 public ActionResult Logout() 49 { 50 FormsAuthentication.SignOut(); 51 return RedirectToAction("Auth", "Index"); 52 } 53 } 54}

発生している問題・エラーメッセージ

コード完成後初めて実行した際には下記のエラーが発生していました。

HTTP Error 400. The size of the request headers is too long.

そのため、上記のエラー解消法を調べた結果、Cookieをリセットしました。
するとError 400は出なくなりましたが、今度は下記のエラーが出てしまいます。

このページは動作していませんlocalhost でリダイレクトが繰り返し行われました。 Cookie を消去してみてください. ERR_TOO_MANY_REDIRECTS

再度Cookieを削除するも改善されません。

エラーメッセージを基に調べるも、WordPressの.htaccessのリダイレクト方法が出てくるばかりでC#での改善方法が出てきません
そのため原因がわからずです。どう対処したらよろしいのでしょうか?

#追記
参考サイト2を基にプロジェクトを作成しようとしたところ、
本来はASP.NET web Application (.net Framework)での作成と記載があるのですが、自身の一覧にはASP.NET web アプリケーションのみで対象のプロジェクトが作れませんでした。
イメージ説明
参考サイト:ASP.NET Identity を空または既存の Web フォーム プロジェクトに追加する

原因を調べたのですが、このサイトと唯一違うところが、
サイト側の環境:Visual Studio2017
自身の環境:Visual Studio2015
となっております。
現在の環境上、Visual Studio2015を使用したいのですが、調べても対象のプロジェクトを一覧に追加する方法が出てきません。

また、試しにASP.NET web アプリケーションでプロジェクトを作成し、記載のコードに修正したのですが、状況はフォーム認証の時と変わっておりませんでした。

この場合2017でないと作成できないのでしょうか?

補足情報(FW/ツールのバージョンなど)

OS : Windows10 Pro 64bit
IDE : Visual Studio 2015
Browser : Google Chrome バージョン: 84.0.4147.105(Official Build) (64 ビット)

プロジェクトの保存先はサーバーとの接続はしていないため、ローカル保存してあります。

足りない情報があれば随時追加します。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/08/04 02:56 編集

Visual Studio のテンプレートで「認証なし」で MVC5 プロジェクトを作って、それに昔々のフォーム認証機能を追加で実装しようとしているようですが、なぜそんなことをしているのですか? テンプレートに組み込まれていて自動的に実装できる ASP.NET Identity による認証を使うことを考えてください。それ以外は初心者には超えることができない茨の道だと思います。
Mr.sijimi

2020/08/04 06:20 編集

SurferOnWww様 アドバイスありがとうございます。 Identity認証の使用で調べて、試しにやってみたのですが 一つだけ不明な内容が出てきたので質問の追記にて記載いたします。
退会済みユーザー

退会済みユーザー

2020/08/04 07:29

必要なテンプレートがインストールされてないように思えます(確信は全くありませんが)。自分の環境ではどうなっているか回答欄に画像を貼っておきます。
guest

回答1

0

ベストアンサー

質問のコメント欄に書きましたが、自分の環境 Windows 10 Pro 64-bit にインストールした Visual Studio Community 2015 ではどうなっているかの画像を貼っておきます。

バージョンは以下の通りです。

イメージ説明

メニューバーから[ファイル(F)]⇒[新規作成(N)]⇒[プロジェクト(P)]で以下のダイアログが表示されます。この時点で質問者さんと違うようです。必要なテンプレートがインストールされてないような感じです。

イメージ説明

そこで[ASP.NET Web Application (.NET Framework)]を選択し[OK]をクリックすると以下のダイアログが表示されます。

イメージ説明

[MVC]、[個別のユーザーアカウント]を選択して[OK]をクリックすれば ASP.NET Identity によるユーザー認証が実装済みの ASP.NET MVC5 のプロジェクトが自動生成されます。参考にしているサイトのようなやり方で。最初[空]で作って後から追加する必要はありません。

投稿2020/08/04 07:45

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Mr.sijimi

2020/08/05 00:57

SurferOnWww様 テンプレートがインストールされていないとのことで、オンラインテンプレートで検索してみたんですが、結果にはなく、他インストール方法を模索しましたが有力な情報は出てきませんでした。 ASP.NET WebApplicationでも新規作成時にMVCの選択と[個別のユーザーアカウント]への変更が可能なことは確認できています。 また、私自身ASP.NET WebApplicationとASP.NET WebApplication(.NETFreamwork)の違いがよくわかっていません。 それについても調べてはみたんですが、比較されている記事がなくわかりませんでした。 この2種類の違いは何かあるのでしょうか?
退会済みユーザー

退会済みユーザー

2020/08/05 01:27

> 他インストール方法を模索しましたが有力な情報は出てきませんでした。 visual studio 2015 asp.net core templates missing あたりをキーワードにググってみてください。 missing “ASP.NET Core Web Application (.NET Core)” template in Visual studio 2015 update 3? https://stackoverflow.com/questions/39807918/missing-asp-net-core-web-application-net-core-template-in-visual-studio-201 Missing ASP.NET Core Template in Visual Studio 2015 http://blog.archybility.com/blog/2017/03/23/missing-asp-net-core-template-visual-studio-2015/ > ASP.NET WebApplicationでも新規作成時にMVCの選択と[個別のユーザーアカウント]への変更が可能なことは確認できています。 では、それでやってみてはいかが? > この2種類の違いは何かあるのでしょうか? 想像ですが、同じものではなかろうかと思います。(Visual Studio 2015 のアップデートで ASP.NET Core が使えるようになった際に ASP.NET Core ... が追加され、元々あった ASP.NET WebApplication に (.NETFreamwork) が追加されただけなのかも)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問