前提
.NET5を利用してログインページを作成しました。
そこでログインページを一番最初に表示するためにHomeControllerにアクションを作成し、startup.csを書き換えた(下記)のですがそうするとエラーが表示されました。
発生している問題・エラーメッセージ
6行目にNullReferenceExceptionエラーが表示されます。
System.NullReferenceException: 'Object reference not set to an instance of an object.'
Controller
C#
1using Microsoft.AspNetCore.Mvc; 2using Microsoft.Extensions.Logging; 3using System; 4using System.Collections.Generic; 5using System.Diagnostics; 6using System.Linq; 7using System.Threading.Tasks; 8using プロジェクト.Models; 9 10namespace プロジェクト.Controllers 11{ 12 public class HomeController : Controller 13 { 14 private readonly ILogger<HomeController> _logger; 15 16 public HomeController(ILogger<HomeController> logger) 17 { 18 _logger = logger; 19 } 20 21 public IActionResult Index() 22 { 23 return View(); 24 } 25 26 public IActionResult Privacy() 27 { 28 return View(); 29 } 30 31 //ここから追加 32 public IActionResult Login() 33 { 34 return View("Areas/Identity/Pages/Account/Login.cshtml"); 35 } 36 //ここまで 37 38 [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] 39 public IActionResult Error() 40 { 41 return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); 42 } 43 } 44}
書き換えたStartup
C#
1using Microsoft.AspNetCore.Builder; 2using Microsoft.AspNetCore.Hosting; 3using Microsoft.AspNetCore.HttpsPolicy; 4using Microsoft.AspNetCore.Identity; 5using Microsoft.AspNetCore.Identity.UI; 6using Microsoft.EntityFrameworkCore; 7using Microsoft.Extensions.Configuration; 8using Microsoft.Extensions.DependencyInjection; 9using Microsoft.Extensions.Hosting; 10using System; 11using System.Collections.Generic; 12using System.Linq; 13using System.Threading.Tasks; 14using プロジェクト.Data; 15 16namespace プロジェクト 17{ 18 public class Startup 19 { 20 public Startup(IConfiguration configuration) 21 { 22 Configuration = configuration; 23 } 24 25 public IConfiguration Configuration { get; } 26 27 // This method gets called by the runtime. Use this method to add services to the container. 28 public void ConfigureServices(IServiceCollection services) 29 { 30 services.AddRazorPages(); 31 32 services.AddDbContext<ApplicationDbContext>(options => 33 options.UseSqlServer( 34 Configuration.GetConnectionString("DefaultConnection"))); 35 services.AddDatabaseDeveloperPageExceptionFilter(); 36 37 services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true) 38 .AddEntityFrameworkStores<ApplicationDbContext>(); 39 services.AddControllersWithViews(); 40 } 41 42 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 43 public void Configure(IApplicationBuilder app, IWebHostEnvironment env) 44 { 45 if (env.IsDevelopment()) 46 { 47 app.UseDeveloperExceptionPage(); 48 app.UseMigrationsEndPoint(); 49 } 50 else 51 { 52 app.UseExceptionHandler("/Home/Error"); 53 // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. 54 app.UseHsts(); 55 } 56 app.UseHttpsRedirection(); 57 app.UseStaticFiles(); 58 59 app.UseRouting(); 60 61 app.UseAuthentication(); 62 app.UseAuthorization(); 63 64 app.UseEndpoints(endpoints => 65 { 66 endpoints.MapRazorPages(); 67 endpoints.MapControllerRoute( 68 name: "default", 69 pattern: "{controller=Home}/{action=Login}/{id?}"); //ここを書き換えた 70 /* 71 書き換え前は 72 pattern: "{controller=Home}/{action=Index}/{id?}"); 73 */ 74 75 }); 76 } 77 } 78}
Login.cshtml
Razor
1@page 2 3@model LoginModel 4 5@{ 6 ViewData["Title"] = "ログイン"; //@*ここにNullReferenceException: Object reference not set to an instance of an object.が表示されます*@ 7} 8 9<h1> ログイン </h1> 10<div class="row"> 11 <div class="col-md-4"> 12 <section> 13 <form id="account" method="post"> 14 <h4>端末IDを入力してログインします</h4> 15 <hr /> 16 <div class="form-group"> 17 <label asp-for="Input.Email">ID</label> 18 <input asp-for="Input.Email" class="form-control" /> 19 <span 9="Input.Email" class="text-danger"></span> 20 </div> 21 <div class="form-group"> 22 <label asp-for="Input.Password">パスワード</label> 23 <input asp-for="Input.Password" class="form-control" /> 24 <span asp-validation-for="Input.Password" class="text-danger"></span> 25 </div> 26 <div class="form-group"> 27 <div class="checkbox"> 28 <label asp-for="Input.RememberMe"> 29 30 <input asp-for="Input.RememberMe" /> 31 @Html.DisplayNameFor(m => m.Input.RememberMe) 32 33 </label> 34 </div> 35 </div> 36 <div class="form-group"> 37 <button type="submit" class="btn btn-primary">Log in</button> 38 </div>
試したこと
@pageディレクティブを削除するとエラーは出なくなりました。ですがログインボタンを押してもページが遷移しなくなりました。
ViewData["Title"] = "ログイン"; をコメントアウトすると17行目の <label asp-for="Input.Email">端末ID</label> に System.ArgumentNullException: 'Value cannot be null. Arg_ParamName_Name'というエラーが表示されます。
補足情報
VS2019のテンプレートはRazorの認証に「個別のアカウント」を使ってプロジェクトを生成し、Loginページをスキャフォールディング機能を使って作成しました。
Microsoft Visual Studio Community 2019 Version 16.9.4
.NET5 MVC
回答1件
あなたの回答
tips
プレビュー