提供下载但不能让用户看到真实地址如何做?

解决方案 »

  1.   

    你可以把资源放到另外一个内网服务器上(无外部IP),每次通过你的download.aspx?id=1判断用户是否付费等信息,然后利用文件拷贝的办法,二进制写给他。跨机器拷贝,需要提交服务器密码的,我这有段代码:using System; 
    using System.Collections; 
    using System.Configuration; 
    using System.Data; 
    using System.IO; 
    using System.Web; 
    using System.Web.Security; 
    using System.Web.UI; 
    using System.Web.UI.HtmlControls; 
    using System.Web.UI.WebControls; 
    using System.Web.UI.WebControls.WebParts; 
    using System.Security.Principal; 
    using System.Runtime.InteropServices; namespace WebApplication1 

        public partial class _Default : System.Web.UI.Page 
        { 
            public const int LOGON32_LOGON_INTERACTIVE = 2; 
            public const int LOGON32_PROVIDER_DEFAULT = 0;         WindowsImpersonationContext impersonationContext;         [DllImport("advapi32.dll", CharSet = CharSet.Auto)] 
            public static extern int LogonUser(String lpszUserName, 
                                      String lpszDomain, 
                                      String lpszPassword, 
                                      int dwLogonType, 
                                      int dwLogonProvider, 
                                      ref IntPtr phToken); 
            [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
            public extern static int DuplicateToken(IntPtr hToken, 
                                    int impersonationLevel, 
                                    ref IntPtr hNewToken); 
            private bool impersonateValidUser(String userName, String domain, String password) 
            {             IntPtr token = IntPtr.Zero; 
                IntPtr tokenDuplicate = IntPtr.Zero;             if (LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) != 0) 
                { 
                    if (DuplicateToken(token, 2, ref tokenDuplicate) != 0) 
                    { 
                        WindowsIdentity tempWindowsIdentity; 
                        tempWindowsIdentity = new WindowsIdentity(tokenDuplicate); 
                        impersonationContext = tempWindowsIdentity.Impersonate(); 
                        if (impersonationContext != null) 
                            return true; 
                        else 
                            return false; 
                    } 
                    else 
                        return false; 
                } 
                else 
                    return false; 
            } 
            private void undoImpersonation() 
            { 
                impersonationContext.Undo();//回退为未更改前账户 
            } 
            protected void Page_Load(object sender, EventArgs e) 
            { 
                //临时更改为 跟 网络硬盘相同用户名密码的账户(此账户必须在网络盘有写入权限)本机也需要同样帐号密码的帐户 
                if (impersonateValidUser("administrator", "192.168.1.102", "kuqu123456")) 
                {            
                    Response.Write(System.IO.File.Exists(@"\\192.168.1.102\share\C#高级编程\C#高级编程(第四版).pdf"));              
                    undoImpersonation(); 
                } 
                else 
                { 
                    Response.Write("登陆失败");                
                }         } 
        } 
    }