asp.net – 在请求之间检索和持久化状态

前端之家收集整理的这篇文章主要介绍了asp.net – 在请求之间检索和持久化状态前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写我的第一个ASP.NET Web API应用程序.我熟悉其他Web应用程序框架(主要是Symfony,还有Django,以及较小程度的RoR).

我正在努力解决一个请求从浏览器/前端客户端发送到Web服务器之后发生的事件的顺序.

我正在编写一个使用DB后端的多租户应用程序.我正在使用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'))
             {

             }
        }
    }
}

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

即:

>创建一个应用程序上下文,我可以在其中填充上下文相关的信息,如数据库连接,邮件配置,对象工厂,杂项状态信息等.
>访问用户对象(我可以添加用户凭据,权限等)
>访问会话变量等?

笔记

>我将在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被设计为无状态的,所以最好的方法是创建一个持久会话(在数据库中),并为每个请求使用会话标识符(如会话密钥或令牌),以标识用户获取他的会话变量/上下文信息.

现在,为了实现您在示例中要求的那种功能,可以通过认证过滤器和授权过滤器(More details on implementing them here)的组合来实现.

WebAPI中的每个请求首先由处理程序处理,然后在执行请求的操作之前,应用过滤器.对于您的示例,验证过滤器将保存DoLogin函数,user.hasPermission逻辑将驻留在授权过滤器中,只有操作逻辑将驻留在控制器中的Action(功能)中.

猜你在找的asp.Net相关文章