Asp.net mvc 4 从.net成员资格提供程序导出所有用户和属性

Asp.net mvc 4 从.net成员资格提供程序导出所有用户和属性,asp.net-mvc-4,membership-provider,simplemembership,Asp.net Mvc 4,Membership Provider,Simplemembership,我需要创建一个处理程序,将列出所有用户谁在我们的网站上注册的csv格式 我们正在为会员提供商使用开箱即用功能,我们有两个自定义属性“OptIN”和“LandingPage”,您如何获得包括自定义属性在内的所有记录 我查看了SQL表,希望能够执行SQL查询,但是提供者和概要文件之间的格式不一致,这取决于它们的概要文件的哪一部分已经完成 是否有任何内置方法可以获取所有用户的属性,因为我猜获取所有用户然后创建一个对象来获取他们的属性在数百万条记录上会很慢。这是我用一个简单的.net处理程序得出的答案,

我需要创建一个处理程序,将列出所有用户谁在我们的网站上注册的csv格式

我们正在为会员提供商使用开箱即用功能,我们有两个自定义属性“OptIN”和“LandingPage”,您如何获得包括自定义属性在内的所有记录

我查看了SQL表,希望能够执行SQL查询,但是提供者和概要文件之间的格式不一致,这取决于它们的概要文件的哪一部分已经完成


是否有任何内置方法可以获取所有用户的属性,因为我猜获取所有用户然后创建一个对象来获取他们的属性在数百万条记录上会很慢。

这是我用一个简单的.net处理程序得出的答案,不确定它是否能很好地扩展,但目前它只适用于一小部分记录

using System;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.Security;
using System.Web.Profile;

namespace Sunlight
{
    /// <summary>
    /// Summary description for reporting
    /// </summary>
    public class Reporting : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Server.ScriptTimeout = 3000;
            context.Response.Buffer = true;
            context.Response.Clear();
            context.Response.ClearContent();
            context.Response.ClearHeaders();
            context.Response.AddHeader("content-disposition", @"attachment;filename=""SunlightExport.csv""");
            context.Response.ContentType = "text/plain";
            MembershipUserCollection users = Membership.GetAllUsers();
            context.Response.Write(
                "Signup Type,Username,Email,EmailVefified,Name,avatarURL,Newsletter Signup,Site,Last Activity,Signup Date");
            foreach (MembershipUser user in users)
            {
                string username = user.UserName;
                context.Response.Write("\r\n");
                ProfileBase profile = ProfileBase.Create(username);
                context.Response.Write(GetAccountType(username) + ",");
                if (!username.Contains("@"))
                {
                    context.Response.Write("=\"" +
                                           username.RemoveCharectorsForCsv()
                                               .Replace("twitter-", "")
                                               .Replace("facebook-", "") + "\",");
                }
                else
                {
                    context.Response.Write(username.RemoveCharectorsForCsv() + ",");
                }

                context.Response.Write(user.Email + ",");
                context.Response.Write(user.IsApproved + ",");    
                context.Response.Write(profile.GetPropertyValue("usersName").ToString().RemoveCharectorsForCsv() + ",");
                context.Response.Write(profile.GetPropertyValue("avatarURL").ToString().RemoveCharectorsForCsv() + ",");
                context.Response.Write(profile.GetPropertyValue("userSubscribe").ToString().RemoveCharectorsForCsv() + ",");
                context.Response.Write(GetHost(profile.GetPropertyValue("originalSiteLogin").ToString().RemoveCharectorsForCsv()) + ",");
                context.Response.Write(user.LastActivityDate + ",");
                context.Response.Write(user.CreationDate);
            }

        }


        public static string GetAccountType(string username)
        {
            if (string.IsNullOrWhiteSpace(username))
            {
                return "UNKNOWN";
            }
            username = username.ToLower();
            return
                username.Contains("@")
                    ? "Email"
                    : username.Contains("twitter-")
                        ? "Twitter"
                        : username.Contains("facebook-") ? "Facebook" : "UNKNOWN";
        }

        public static string GetHost(string site)
        {
            try
            {
                return string.IsNullOrWhiteSpace(site) ? string.Empty : new Uri(site).DnsSafeHost;
            }
            catch
            {
                return string.Empty;
            }

        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

    public static class MyStringExtensions
    {
        public static string RemoveCharectorsForCsv(this string value)
        {
            return Regex.Replace(value, @"\s+|,|'", " ");
        }
    }

}
使用系统;
使用System.Text.RegularExpressions;
使用System.Web;
使用System.Web.Security;
使用System.Web.Profile;
名称空间阳光
{
/// 
///报告摘要说明
/// 
公共类报告:IHttpHandler
{
公共void ProcessRequest(HttpContext上下文)
{
context.Server.ScriptTimeout=3000;
context.Response.Buffer=true;
context.Response.Clear();
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.AddHeader(“内容处置”,@“附件;文件名=“SunlightExport.csv”);
context.Response.ContentType=“text/plain”;
MembershipUserCollection用户=Membership.GetAllUsers();
context.Response.Write(
“注册类型、用户名、电子邮件、EmailVefied、姓名、头像、时事通讯注册、网站、上次活动、注册日期”);
foreach(用户中的成员身份用户)
{
字符串username=user.username;
context.Response.Write(“\r\n”);
ProfileBase profile=ProfileBase.Create(用户名);
Write(GetAccountType(username)+“,”;
如果(!username.Contains(“@”))
{
context.Response.Write(“=\”)+
username.removecharectrsforcsv()
.Replace(“twitter-”,“”)
.替换(“facebook-”,“)+“\”,”;
}
其他的
{
context.Response.Write(username.RemoveCharectorsForCsv()+“,”);
}
context.Response.Write(user.Email+“,”);
context.Response.Write(user.IsApproved+“,”);
Write(profile.GetPropertyValue(“usersName”).ToString().RemoveCharectorsForCsv()+“,”);
context.Response.Write(profile.GetPropertyValue(“avatarURL”).ToString().RemoveCharectorsForCsv()+”,”;
Write(profile.GetPropertyValue(“userSubscribe”).ToString().RemoveCharectorsForCsv()+“,”);
Write(GetHost(profile.GetPropertyValue(“originalSiteLogin”).ToString().RemoveCharectorsForCsv())+“,”;
context.Response.Write(user.LastActivityDate+“,”);
context.Response.Write(user.CreationDate);
}
}
公共静态字符串GetAccountType(字符串用户名)
{
if(string.IsNullOrWhiteSpace(用户名))
{
返回“未知”;
}
username=username.ToLower();
返回
用户名。包含(“@”)
?“电子邮件”
:username.Contains(“twitter-”)
?“推特”
:username.Contains(“facebook-”?“facebook”:“未知”;
}
公共静态字符串GetHost(字符串站点)
{
尝试
{
返回string.IsNullOrWhiteSpace(site)?string.Empty:新Uri(site.DnsSafeHost);
}
抓住
{
返回字符串。空;
}
}
公共布尔可重用
{
得到
{
返回false;
}
}
}
公共静态类MyStringExtensions
{
公共静态字符串removeCharectrsforcsv(此字符串值)
{
返回Regex.Replace(值@“\s+|,|'”,“”);
}
}
}