自定义FileHandler - 获取Loged用户

时间:2018-06-11 20:30:50

标签: dotnetnuke

我为PDF文件创建了自定义文件处理程序并将其注册到DotNetNuke,它运行正常。

但是现在我还需要让当前用户在服务pdf, 但不知道如何。

我尝试在BeginProcessRequest中使用此代码:

DotNetNuke.Entities.Users.UserController.Instance.GetCurrentUserInfo()

但它总是 NULL

我的AsyncHandler代码:

public class Code : IHttpAsyncHandler
{
    public bool IsReusable { get { return false; } }

    public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)
    {
        AsynchOperation asynch = new AsynchOperation(cb, context, extraData);
        asynch.StartAsyncWork();
        return asynch;
    }

    public void EndProcessRequest(IAsyncResult result)
    {
    }

    public void ProcessRequest(HttpContext context)
    {
        throw new InvalidOperationException();
    }
}

2 个答案:

答案 0 :(得分:1)

原因是因为你的处理程序没有作为DNN管道的一部分运行,因此所有的DNN优点都没有通过(比如你的模块没有使用PortalModuleBase)。

如果您正在取消获取PDF - 您还应该将PortalId和UserId作为查询字符串params或请求标头的一部分传递 - 这样您就可以通过UserId和门户网站ID提取所需的用户信息。

答案 1 :(得分:0)

我添加了对DotNetNuke.dll的引用并更改了代码:

public class Code : IHttpAsyncHandler
{
    public bool IsReusable { get { return false; } }

    public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)
    {
        // to get user name
        var uname = context.User.Identity.Name; 
        // to populate user roles
        var userRoles = DotNetNuke.Entities.Users.UserController.GetUserByName(uname).Roles;

        AsynchOperation asynch = new AsynchOperation(cb, context, extraData);
        asynch.StartAsyncWork();
        return asynch;
    }

    public void EndProcessRequest(IAsyncResult result)
    {
    }

    public void ProcessRequest(HttpContext context)
    {
        throw new InvalidOperationException();
    }
}