私は、フロントエンドのWebアプリケーションと電話アプリからのリクエストを処理するASP .Net Core 1.1 Web APIを持っています。このアプリは、不動産業者が不動産の点検を行うためのものです。したがって、システムは、検査、プロパティ、ユーザ、代理店などのエンティティを有する。ユーザ(すなわち、不動産代理人)および不動産は、代理店に属する。したがって、不動産業者は1人以上のユーザーと1つ以上のプロパティを持つことができます。ASP .Net Core Web APIのログインユーザーの状態を維持する
たとえば、不動産業者の誰かが検査したすべての不動産のリストを表示することができます。この場合、彼はウェブ/電話アプリのどこかをクリックし、アプリはHTTP GETリクエストをAPIに送り、プロパティのリストを取得します。 Web APIは、この要求を受け取ると、まずどのユーザーがこれを要求しているかを確認した後、このユーザーがどの代理店に属しているかを確認し、この代理店に属するすべてのプロパティを返します。
[Authorize]
[HttpGet]
public async Task<IActionResult> GetProperties()
{
// Get Auth0 identifier for the user performing the request
string nameIdentifier = User.Claims.FirstOrDefault(c => c.Type == System.Security.Claims.ClaimTypes.NameIdentifier)?.Value;
// Retrieve this user from the database
User user = await _context.User.SingleOrDefaultAsync(u => u.Username == nameIdentifier);
// Return a list of properties that belong to the user's agency
return Ok(_context.Properties
.Where(p.AgencyId == user.AgencyId));
}
今、すべてがGETリクエスト:
[Table("agency")]
public class Agency
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column("agency_id")]
public int? Id { get; set; }
[Column("name")]
public string Name { get; set; }
}
[Table("user")]
public class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column("user_id")]
public int? Id { get; set; }
[Column("username")]
public string Username { get; set; }
[Column("agency_id")]
public int AgencyId { get; set; }
[ForeignKey("AgencyId")]
public Agency Agency { get; set; }
}
[Table("property")]
public class Property
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column("property_id")]
public int? Id { get; set; }
[Column("address")]
public string Address { get; set; }
[Column("agency_id")]
public int AgencyId { get; set; }
[ForeignKey("AgencyId")]
public Agency Agency { get; set; }
}
前述の要求を処理したWeb APIのコントローラのアクションは、次のようになりますので、...これらは私が持っている[単純化]のモデルをしていますAPIには、ログインしたユーザーの代理店に関連するレコードをAPIが返す、このようにフィルタリングされます。ユーザーが検査のリストを要求しても、家主やテナントに関わらず、APIは常にユーザーの代理店に属するレコードのみを返します。
ASPコアはステートレスなので、ユーザーがログインしたときにユーザーオブジェクトをサーバーに保存することができず、メモリ内に各コントローラアクションで呼び出す準備ができています。しかし、私はこの往復のような気がしますが、APIがGETリクエストを受信するたびに、このユーザーが所属する機関を無駄にしていることがわかります。これを行うより良い方法はありますか?私は、ASPとウェブ開発一般にはかなり新しいです。任意のアイデア/ヒント/ポインターを高く評価します。
は、最も優れた答えロンいただきありがとうございます! – user1900799