充分利用 MVC Owin 身份和 n(3) 层架构

2023-12-05

我一直在学习开箱即用欧文身份我喜欢它为我们提供的用户管理的易用性。然后我遇到的问题是它通过(似乎)直接与 EF 交互ApplicationDbContext这是我不想要的。我更喜欢使用我的 3 层架构,IE 它与服务层 (BLL) 交互,而服务层又与 EF 交互。我找不到模板、教程,甚至找不到起点来维护所提供的所有功能并实现我想要的分离。

那么有没有办法使用服务层来代替ApplicationDbContext在 MVC 身份包中。


如果您想使用现有的数据库/表,则不必使用整个 ASP.Net Identity。相反,你可以使用Owin Cookie 身份验证中间件.

我有工作示例代码GitHub。如果你想测试它,你只需设置一个断点AccountController.cs,并返回 true。

以下是配置中间件和登录的两个主要类。

启动.cs

public class Startup
{
   public void Configuration(IAppBuilder app)
   {
      app.UseCookieAuthentication(new CookieAuthenticationOptions
      {
        AuthenticationType = "ApplicationCookie",
        LoginPath = new PathString("/Account/Login")
      });
   }
}

OwinAuthenticationService.cs

public class OwinAuthenticationService : IAuthenticationService
{
    private readonly HttpContextBase _context;
    private const string AuthenticationType = "ApplicationCookie";

    public OwinAuthenticationService(HttpContextBase context)
    {
        _context = context;
    }

    public void SignIn(User user)
    {
        IList<Claim> claims = new List<Claim>
            {
                new Claim(ClaimTypes.Name, user.UserName),
                new Claim(ClaimTypes.GivenName, user.FirstName),
                new Claim(ClaimTypes.Surname, user.LastName),
            };

        ClaimsIdentity identity = new ClaimsIdentity(claims, AuthenticationType);

        IOwinContext context = _context.Request.GetOwinContext();
        IAuthenticationManager authenticationManager = context.Authentication;

        authenticationManager.SignIn(identity);
    }

    public void SignOut()
    {
        IOwinContext context = _context.Request.GetOwinContext();
        IAuthenticationManager authenticationManager = context.Authentication;

        authenticationManager.SignOut(AuthenticationType);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

充分利用 MVC Owin 身份和 n(3) 层架构 的相关文章

  • Directory.Delete 之后 Directory.Exists 有时返回 true ?

    我有非常奇怪的行为 我有 Directory Delete tempFolder true if Directory Exists tempFolder 有时 Directory Exists 返回 true 为什么 可能是资源管理器打开了
  • 为什么 int8_t 和用户通过 cin 输入显示奇怪的结果[重复]

    这个问题在这里已经有答案了 一小段代码让我发疯 但希望你能阻止我跳出窗外 看这里 include
  • 如何让 Swagger 插件在自托管服务堆栈中工作

    我已经用 github 上提供的示例重新提出了这个问题 并为任何想要自己运行代码的人提供了一个下拉框下载链接 Swagger 无法在自托管 ServiceStack 服务上工作 https stackoverflow com questio
  • 计算 Richtextbox 中所有单词的最有效方法是什么?

    我正在编写一个文本编辑器 需要提供实时字数统计 现在我正在使用这个扩展方法 public static int WordCount this string s s s TrimEnd if String IsNullOrEmpty s re
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • ClickOnce 应用程序错误:部署和应用程序没有匹配的安全区域

    我在 IE 中使用 FireFox 和 Chrome 的 ClickOnce 应用程序时遇到问题 它工作正常 异常的详细信息是 PLATFORM VERSION INFO Windows 6 1 7600 0 Win32NT Common
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 为什么 Google 测试会出现段错误?

    我是 Google Test 的新手 正在尝试提供的示例 我的问题是 当我引入失败并设置GTEST BREAK ON FAILURE 1 或使用命令行选项 GTest 将出现段错误 我正在考虑这个例子 https code google c
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • 使用管道时,如果子进程数量大于处理器数量,进程是否会被阻塞?

    当子进程数量很大时 我的程序停止运行 我不知道问题是什么 但我猜子进程在运行时以某种方式被阻止 下面是该程序的主要工作流程 void function int process num int i initial variables for
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 如何从 ODBC 连接获取可用表的列表?

    在 Excel 中 我可以转到 数据 gt 导入外部数据 gt 导入数据 然后选择要使用的数据源 然后在提供登录信息后 它会给我一个表格列表 我想知道如何使用 C 以编程方式获取该列表 您正在查询什么类型的数据源 SQL 服务器 使用权 看

随机推荐

  • 保存与 Cakephp 3 的关联

    我在使用 CakePHP 3 和通过一项操作保存新实体及其关联时遇到问题 在我看来 我按照文档中的建议进行操作 这是我的控制器 articles TableRegistry get Articles article articles gt
  • AngularJS 中指令隔离范围与 ng-repeat 范围

    我有一个带有隔离范围的指令 以便我可以在其他地方重用该指令 并且当我将此指令与ng repeat 它无法工作 我已阅读有关此主题的所有文档和 Stack Overflow 答案并了解这些问题 我相信我已经避免了所有常见的问题 所以我知道我的
  • jQuery .each 在 Safari 上比 Chrome/Firefox 慢

    我有一个大型 HTML 表格 1 000 1 500 行 40 列宽 我有一些输入和选择框 以便用户可以过滤行 附加的相关 javascript jquery 注意 没有粘贴整个代码库 因为它不是瓶颈 如下所示 function autoR
  • 错误:文档未定义,在构建角度通用应用程序时

    Error factory require jquery document window navigator ReferenceError document is not defined 面对角度通用渲染服务器端的问题 我用谷歌搜索了这个并
  • 如何理解UML中类似自反关联的“自反聚合”关系

    这个类图是什么意思 自反关联的类图使用了实线和箭头 但这里用空心菱形代替 和递归有关系吗 这个类图会生成什么 如果能举个例子就最好了 另外这个递归关系应该是一对多 如果存储数据库怎么建表 这是什么意思 这个类图意味着Unit can与其他几
  • 如何保持Python脚本输出窗口打开?

    我刚刚开始使用Python 当我在 Windows 上执行 python 脚本文件时 输出窗口出现但立即消失 我需要它留在那里 以便我可以分析我的输出 我怎样才能保持它打开 您有几个选择 从已打开的终端运行该程序 打开命令提示符并键入 py
  • Android Studio Arctic Fox (Adb) - 连接的设备在一段时间后断开连接

    我有 7 部不同的 Android 手机 它们都有不同的 Android 操作系统 他们都面临着同样的断线问题 大约一小时后 设备将断开连接 当它断开连接时 Allow USB debugging 出现弹出窗口twice并希望我允许已批准的
  • 将 RIGHT 外连接转换为左外连接 SQLite

    我需要为 Sqlite 设计一个查询 原来的查询是这样的 FROM PhysicianActivity INNER JOIN Activity ON PhysicianActivity ActivityID Activity ID RIGH
  • 在运行时将 byte[] 加载到 System.Windows.Controls.Image 中

    我有一个代表 png 文件的 byte 我正在通过 WebClient 下载此 png 当 WebClient 下载了我通过 URL 引用的 png 时 我得到一个 byte 我的问题是 如何将 byte 加载到 WPF 中的 System
  • 调整大小后 QRubberBand 在 QGraphicsView 上移动

    我在这个主题中遇到了同样的问题 当我调整窗口大小时 QRubberBand 移动 经过几次尝试 我意识到本主题的解决方案不适用于 QGraphics 视图 当我调整窗口大小时 为什么我的选择会围绕 QgraphicsView 移动 impo
  • 如何使用seaborn displot 将直方图条形围绕刻度线居中?堆叠酒吧是必不可少的

    我搜索了许多制作以刻度线为中心的直方图的方法 但无法找到适用于 seaborn displot 的解决方案 函数 displot 允许我根据数据框中的列堆叠直方图 因此更喜欢使用 displot 的解决方案或允许基于数据框中的列进行堆叠的解
  • 遍历整个 PDF 并将蓝色更改为黑色(同时更改下划线的颜色)+ iText

    我正在使用下面的代码从 pdf 文本中删除蓝色 它运行良好 但它不是改变下划线颜色 而是正确改变文本颜色 原始文件部分 被操纵的文件 正如您在上面的操作文件中看到的 下划线颜色没有改变 两周以来我一直在寻找解决这个问题的方法 任何人都可以帮
  • Firebase 中的嵌套列表[重复]

    这个问题在这里已经有答案了 尝试了解如何在 Firebase 中实现嵌套列表 问题可简化为 一个 1 对 N 消息传递系统 其中 对于每条消息 您希望维护已接收并阅读该消息的用户列表 已读过 Firebase 中数组的最佳实践 尝试避免使用
  • 如何更改 pandas groupby.agg 函数的输入参数?

    我在使用 groupby object agg 方法和想要更改输入参数的函数时遇到问题 是否有可用的函数名称资源 agg 接受 以及如何将参数传递给它们 请参阅下面的示例 import pandas as pd import numpy a
  • Jenkins 无法访问已安装的驱动程序

    我的 Jenkins 服务器在 Windows 2008 服务器上的 Tomcat 中运行 我在CentOS上搭建了一个NFS服务器 Win2008服务器可以通过mount命令访问NFS共享文件夹 我在 Windows 上以管理员用户身份运
  • 阻止孩子覆盖父母的轮廓?

    由于某些元素位于幻灯片内 我使用带有负偏移量的轮廓而不是边框 然而 子元素覆盖了轮廓 但我想要它们上面的边框 我用它来构建内容 http jsfiddle net z22kw2zq 1 parent position relative ou
  • 有效地查找数组中元素的行列?

    如何有效地找到数组中每个元素的排名 在平局的情况下求平均值 例如 float rank T T input Implementation auto foo rank 3 6 4 2 2 foo 3 5 4 1 5 1 5 我能想到的唯一方法
  • 当应用程序处于后台或关闭状态时,无法从 Firebase 消息服务将记录插入 SQLite 数据库

    我正在尝试 Firebase 通知 我能够使用通知正常工作this文档 消息已收到 我能够从内部向通知栏发送通知MyFirebaseMessagingService服务等级 即使应用程序处于后台或关闭时也会发生这种情况 我需要的是收集通知中
  • 授权 Twitter 成功后返回应用

    我将我的应用程序配置为使用通过推特登录特征 但在 Safari 上授权应用程序成功后 我无法返回到我的应用程序 我在堆栈溢出上看到了另一个有同样问题的问题使用 URLShemes但这对我不起作用 我没有足够的声誉来添加评论来要求他们接受答案
  • 充分利用 MVC Owin 身份和 n(3) 层架构

    我一直在学习开箱即用欧文身份我喜欢它为我们提供的用户管理的易用性 然后我遇到的问题是它通过 似乎 直接与 EF 交互ApplicationDbContext这是我不想要的 我更喜欢使用我的 3 层架构 IE 它与服务层 BLL 交互 而服务