Custom FileHandler - получить зарегистрированного пользователя - PullRequest
0 голосов
/ 11 июня 2018

Я создал собственный обработчик файлов для файлов 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 голосов
/ 13 июня 2018

Я добавил ссылку на 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();
    }
}
0 голосов
/ 12 июня 2018

Причина в том, что ваш обработчик не работает как часть конвейера DNN, поэтому все достоинства DNN не проходят (например, если ваш модуль не использовал PortalModuleBase).

Если вы звоните, чтобы получить PDF - вы также должны передать PortalId и UserId в качестве параметров строки запроса или часть заголовка запроса - чтобы вы могли получить необходимую информацию пользователя по UserId и идентификатору портала.

...