251

以前に MVC5 を使用してこれを行っUser.Identity.GetUserId()たことがありますが、ここでは機能しないようです。にはメソッドUser.IdentityがありませんGetUserId()

を使用してMicrosoft.AspNet.Identityいます。

4

19 に答える 19

104

コントローラーで取得できます:

using System.Security.Claims;
var userId = this.User.FindFirstValue(ClaimTypes.NameIdentifier);

または.Core v1.0以前のような拡張メソッドを書く

using System;
using System.Security.Claims;

namespace Shared.Web.MvcExtensions
{
    public static class ClaimsPrincipalExtensions
    {
        public static string GetUserId(this ClaimsPrincipal principal)
        {
            if (principal == null)
                throw new ArgumentNullException(nameof(principal));

            return principal.FindFirst(ClaimTypes.NameIdentifier)?.Value;
        }
    }
}

そして、ユーザー ClaimsPrincipal が利用可能な場所ならどこでも取得します:

using Microsoft.AspNetCore.Mvc;
using Shared.Web.MvcExtensions;

namespace Web.Site.Controllers
{
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return Content(this.User.GetUserId());
        }
    }
}
于 2016-08-09T09:50:54.217 に答える
39

System.Security.Claims の使用を含め、GetUserId() 拡張メソッドにアクセスできました

注意: Microsoft.AspNet.Identity を既に使用していましたが、拡張メソッドを取得できませんでした。したがって、両方を組み合わせて使用​​する必要があると思います

using Microsoft.AspNet.Identity;
using System.Security.Claims;

編集:この回答は古くなっています。CORE 1.0でこれを達成するための時代遅れの方法については、Soren'sまたはAdrien's answerを見てください。

于 2015-06-08T05:32:12.517 に答える
20

この投稿のどこかで述べたように、GetUserId() メソッドは UserManager に移動されました。

private readonly UserManager<ApplicationUser> _userManager;

public YourController(UserManager<ApplicationUser> userManager)
{
    _userManager = userManager;
}

public IActionResult MyAction()
{
    var userId = _userManager.GetUserId(HttpContext.User);

    var model = GetSomeModelByUserId(userId);

    return View(model);
}

空のプロジェクトを開始した場合は、startup.cs のサービスに UserManger を追加する必要がある場合があります。そうでなければ、これはすでに当てはまるはずです。

于 2016-10-22T07:41:02.143 に答える
3

Razor ビューで現在のユーザー ID を取得するには、次のようにビューに UserManager を挿入できます。

@inject Microsoft.AspNetCore.Identity.UserManager<ApplicationUser> _userManager
@{ string userId = _userManager.GetUserId(User); }

お役に立てば幸いです。

于 2020-06-02T07:44:34.700 に答える
-12

ASP.NET MVC コントローラーでこれが必要な場合は、使用します

using Microsoft.AspNet.Identity;

User.Identity.GetUserId();

ステートメントがないと存在しないusingため、ステートメントを追加する必要があります。GetUserId()

于 2015-06-08T05:46:20.080 に答える