gpt4 book ai didi

asp.net - 跨请求检索和持久化状态

转载 作者:行者123 更新时间:2023-12-04 01:10:15 24 4
gpt4 key购买 nike

我正在编写我的第一个 ASP.NET Web API 应用程序。我熟悉其他 Web 应用程序框架(主要是 Symfony,但也熟悉 Django,以及在较小程度上是 RoR)。

我正在努力了解从浏览器/前端客户端向 Web 服务器发送请求后发生的事件序列。

我正在编写一个使用数据库后端的 Multi-Tenancy 应用程序。我正在使用 ADO 和原始 SQL 来访问数据库,我还需要为每个用户存储大量信息,因此基本上,我为用户创建(或从缓存中获取)一个预加载的上下文。

这是一些伪代码,它说明了我在 ASP.NET 中想要实现的目标。

namespace myApp.Controllers
{
public class FoobarController : ApiController
{
public Response doLogin(request)
{
var ctx = myApplicationContext.getInstance();
var user = ctx.getUser();

if (!user.isLoggedOn())
{
username = request.getParameter('username');
password= request.getParameter('password');

dbManager = ctx.getDbInstance();

resp = dbManager.internalLogin(username, password);

// Load permissions etc for current user, from db
// Store user info in cache ..
}
}

public Response ActionOne(request)
{
ctx = myApplicationContext.getInstance();
user = ctx.getUser();

if (user.hasPermission('xxx'))
{

}
}
}
}

我的问题是,我如何实现这种功能:

即:
  • 创建一个应用程序上下文,我可以在其中填充上下文敏感信息,例如数据库连接、邮件程序配置、对象工厂、其他状态信息等。
  • 访问用户对象(我可以向其中添加用户凭据、权限等)
  • 可以访问 session 变量等吗?

  • 备注
  • 我将在 Linux 上部署 Web 应用程序,并将使用 Apache 作为 Web 服务器。
  • 出于本项目的目的,我不想使用任何 Microsoft 技术,如 Azure、Windows 身份验证等(C# 和 ASP.Net 除外)
  • 我想使用原始数据库连接,而不是使用实体管理器(旧应用程序端口)
  • 最佳答案

    I am struggling a bit, to understand the sequence of events that occur after a request is sent from a browser/front end client, to the web server.



    为此,我会说 this PDF Poster给出了 ASP.NET WebAPI 中请求处理的最佳图示。

    My question, is, how do I implement this kind of functionality:

    Namely:

    • Create an application context, in which I can populate with context sensitive information like a database connection, mailer configuration, object factories, miscellaneous state information etc.

    • Access a user object (which I can add user credentials, permissions etc to)

    • Have access to session variables etc?



    为此,我要说的是,WebAPI 被设计为无状态的,因此,最好的方法是创建一个持久 session (例如在数据库中)并为每个请求使用 session 标识符(如 session key 或 token )来识别用户并获取他的 session 变量/上下文信息。

    现在,为了实现您在示例中要求的那种功能,可以通过结合 Authentication Filters 和 Authorization Filters( More details on implementing them here ) 来实现。

    WebAPI 中的每个请求首先由处理程序处理,然后在执行请求的操作之前应用过滤器。对于您的示例,身份验证过滤器将包含 DoLogin功能和 user.hasPermission逻辑将驻留在授权过滤器中,只有 Action 逻辑将驻留在 Controller 的 Action(function) 中。

    enter image description here

    关于asp.net - 跨请求检索和持久化状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33944557/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com