我为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();
}
}
答案 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();
}
}