私はAsp.Net MVC 5(コードファースト)でカスタム認証と認証を作成しようとします。 はすることはできません:私は2クラスを作成したモデルで、UserAccount
とUserAccountModel
IEnumerableキャストエラーC#
私は、エラーコードが英語ではありませんが、このようなものであるUserAccountModel
return listAccounts.Where(acc => acc.UserName.Equals(username));
にエラーが発生しています暗黙的にIEnumerable
をリストに変換するには、キャストを使用してください。
問題を解決するにはどうすればよいですか?おかげで
//-------------------------------
//UserAccont.cs
//-------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace MvcSia.Models
{
public class UserAccont
{
[Key]
public int UserId { get; set; }
[Required(ErrorMessage ="Choose a name")]
public string Name{ get; set; }
[Required(ErrorMessage ="Choose surname")]
public string Surname{ get; set; }
[Required(ErrorMessage ="Email required")]
[RegularExpression(@"^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$", ErrorMessage = "Invalid email")]
public string Email { get; set; }
[Required(ErrorMessage = "User Name required")]
public string UserName { get; set; }
[Required(ErrorMessage = "User type required")]
public string UserType { get; set; }
[Required(ErrorMessage = "Password required")]
[DataType(DataType.Password)]
public string Password { get; set; }
[Compare("Password", ErrorMessage ="Password not valid")]
[DataType(DataType.Password)]
[Required(ErrorMessage = "User Name required")]
public string ConfirmPassword { get; set; }
}
}
//-------------------------------
//UserAccountModel.cs
//-------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MvcSia.Models
{
public class UserAccontModel
{
private List<UserAccont> listAccounts = new List<UserAccont>();
public UserAccont find(string username)
{
return listAccounts.Single(acc => acc.UserName.Equals(username));
}
public UserAccont login(string username, string password)
{
return listAccounts.Where(acc => acc.UserName.Equals(username));
}
}
}
さて、あなたの方法は、(ところで、UserAccount' 'のためにタイプミス)' UserAccont'を返すためのものですが、 'WHERE'方法は、単に' IEnumerableを 'を返します。おそらく、あなたは 'Where'ではなく' FirstOrDefault'を意味していたでしょうか?また、.NET命名規則に従うことを強くお勧めします。 –
あなたのメソッドは 'UserAccont'の戻り値の型を期待し、' List'のコレクションではありません –
garfbradaz
FirstOrDefaultまたはSingleOrDefaultに変更すると、ログインメソッドからの戻り値をチェックするのを忘れないでください。また、FirstOrDefaultまたはSingleOrDefaultをFindメソッドで使用し、nullも同様にチェックします。存在しないユーザーアカウントが渡された場合、findは例外をスローします。 – Bearcat9425