Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#asp.net中获取验证用户的最佳方法_C#_Asp.net_Login_Asp.net Mvc 5 - Fatal编程技术网

在C#asp.net中获取验证用户的最佳方法

在C#asp.net中获取验证用户的最佳方法,c#,asp.net,login,asp.net-mvc-5,C#,Asp.net,Login,Asp.net Mvc 5,我对如何解决这个问题有些茫然,但希望你们的意见能对我有所帮助 我试图只允许我的“主页/日历”网站的用户查看他们创建的内容。在我看来,要做到这一点,我需要进入每个Create、Add、Remove和Update函数,并使用以下方法获取当前用户ID: User.Identity.GetUserId(); 然后,我会将这个UserID与函数运行时存储在表中的UserID进行比较 以下是我的桌子的外观: CREATE TABLE [dbo].[AspNetUserLogins] ( [Logi

我对如何解决这个问题有些茫然,但希望你们的意见能对我有所帮助

我试图只允许我的“主页/日历”网站的用户查看他们创建的内容。在我看来,要做到这一点,我需要进入每个Create、Add、Remove和Update函数,并使用以下方法获取当前用户ID:

User.Identity.GetUserId();
然后,我会将这个UserID与函数运行时存储在表中的UserID进行比较

以下是我的桌子的外观:

CREATE TABLE [dbo].[AspNetUserLogins] (
    [LoginProvider] NVARCHAR (128) NOT NULL,
    [ProviderKey]   NVARCHAR (128) NOT NULL,
    [UserId]        NVARCHAR (128) NOT NULL,
    CONSTRAINT [PK_dbo.AspNetUserLogins] PRIMARY KEY CLUSTERED ([LoginProvider] ASC, [ProviderKey] ASC, [UserId] ASC),
    CONSTRAINT [FK_dbo.AspNetUserLogins_dbo.AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [dbo].[AspNetUsers] ([Id]) ON DELETE CASCADE
);



    CREATE TABLE [dbo].[Events] (
    [EventID]     INT            IDENTITY (1, 1) NOT NULL,
    [Subject]     NVARCHAR (100) NOT NULL,
    [Description] NVARCHAR (300) NULL,
    [Start]       DATETIME       NOT NULL,
    [End]         DATETIME       NULL,
    [ThemeColor]  NVARCHAR (10)  NULL,
    [IsFullDay]   BIT            NOT NULL,
    [UserId]        NVARCHAR (128) NOT NULL,
    CONSTRAINT [PK__Event__7944C8701D5AFFC5] PRIMARY KEY CLUSTERED ([EventID] ASC)
);

CREATE TABLE [dbo].[Links] (
    [Id]   INT            IDENTITY (1, 1) NOT NULL,
    [Name] VARCHAR (50)   NULL,
    [Link] VARCHAR (1000) NULL,
    [UserId]        NVARCHAR (128) NOT NULL,
    CONSTRAINT [PK__tmp_ms_x__3214EC07BE58FD26] PRIMARY KEY CLUSTERED ([Id] ASC)
);
我希望有一个更简单或更优雅的解决方案。我最终将把这个项目交给训练营,并向雇主展示

这是我的家庭控制器:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;



namespace HomePageCalendar.Controllers
{
    public class HomeController : Controller
    {
        private MyDatabaseEntities _context;

        public HomeController()
        {
            _context = new MyDatabaseEntities();
        }

        protected override void Dispose(bool disposing)
        {
            _context.Dispose();
        }
        public ActionResult New()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Create(Links home)
        {
            _context.Links.Add(home);
            _context.SaveChanges();
            return RedirectToAction("Index", "home");
        }
        public ActionResult Index(string searchString)
        {
            var Link = from l in _context.Links
                       select l;

            if (!String.IsNullOrEmpty(searchString))
            {
                Link = Link.Where(s => s.Name.Contains(searchString));
            }

            var Name = _context.Links.ToList();
            return View(Link);

        }

        public ActionResult Remove()
        {
            ViewBag.title = "Remove Links";
            ViewBag.homes = _context.Links.ToList();
            return View();
        }

        [HttpPost]
        public ActionResult Remove(int[] cheeseIds)
        {
            foreach (int cheeseId in cheeseIds)
            {
                Links theCheese = _context.Links.Single(c => c.Id == cheeseId);
                _context.Links.Remove(theCheese);
            }

            _context.SaveChanges();

            return Redirect("/");
        }

        public ActionResult About()
        {
            ViewBag.Message = "Your application description page.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }
    }
}

不,你就是这么做的。当用户请求查看或修改数据时,您将检查是否允许当前用户查看或修改该数据。如果他们是,允许它。如果不是,则返回错误或以某种方式提供故障响应。“检查是否允许”的方法有很多,这取决于您的业务逻辑和如何处理失败的检查。@David感谢您的回复。我用我的家庭控制器更新了OP。因此,基本上你是说在每个函数中,我应该验证用户是当前用户?有多种方法可以做到这一点。例如,当用户通过其ID请求记录时,您可以通过该ID和用户ID获取该记录。如果未找到匹配项,则将其视为404。或者只通过ID获取记录,然后编写
if
,查看记录的UserID是否与当前用户匹配。如果没有,则返回“权限被拒绝”错误。基本上,您如何实现它取决于您希望系统如何运行。不,这基本上是您应该如何实现的。当用户请求查看或修改数据时,您将检查是否允许当前用户查看或修改该数据。如果他们是,允许它。如果不是,则返回错误或以某种方式提供故障响应。“检查是否允许”的方法有很多,这取决于您的业务逻辑和如何处理失败的检查。@David感谢您的回复。我用我的家庭控制器更新了OP。因此,基本上你是说在每个函数中,我应该验证用户是当前用户?有多种方法可以做到这一点。例如,当用户通过其ID请求记录时,您可以通过该ID和用户ID获取该记录。如果未找到匹配项,则将其视为404。或者只通过ID获取记录,然后编写
if
,查看记录的UserID是否与当前用户匹配。如果没有,则返回“权限被拒绝”错误。基本上,如何实现它取决于您希望系统的行为方式。