asp.net实现访问局域网共享目录下文件的解决方法_实用技巧

本文以实例讲述了asp.net实现访问局域网共享目录下文件的解决方法,完整代码如下所示:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
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.Xml.Linq;
using System.IO;
using System.Security.Principal;
using System.Runtime.InteropServices;
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")]
  public static extern int LogonUserA(String lpszUserName,
    String lpszDomain,
    String lpszPassword,
    int dwLogonType,
    int dwLogonProvider,
    ref IntPtr phToken);
  [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
  public static extern int DuplicateToken(IntPtr hToken,
    int impersonationLevel,
    ref IntPtr hNewToken);
  [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
  public static extern bool RevertToSelf();
  [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
  public static extern bool CloseHandle(IntPtr handle);
  public void Page_Load(Object s, EventArgs e)
  {
    if (impersonateValidUser("lucas", "Workgroup", "lcas"))
    {
      string path = @"//zhehui001/lu";
      foreach (string f in Directory.GetFiles(path))
      {
        Response.Write(f);
      }
      undoImpersonation();
    }
    else
    {
      //Your impersonation failed. Therefore, include a fail-safe mechanism here.
    }
  }
  private bool impersonateValidUser(String userName, String domain, String password)
  {
    WindowsIdentity tempWindowsIdentity;
    IntPtr token = IntPtr.Zero;
    IntPtr tokenDuplicate = IntPtr.Zero;
    if (RevertToSelf())
    {
      if (LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE,
        LOGON32_PROVIDER_DEFAULT, ref token) != 0)
      {
        if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
        {
          tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
          impersonationContext = tempWindowsIdentity.Impersonate();
          if (impersonationContext != null)
          {
            CloseHandle(token);
            CloseHandle(tokenDuplicate);
            return true;
          }
        }
      }
    }
    if (token != IntPtr.Zero)
      CloseHandle(token);
    if (tokenDuplicate != IntPtr.Zero)
      CloseHandle(tokenDuplicate);
    return false;
  }
  private void undoImpersonation()
  {
    impersonationContext.Undo();
  }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索asp.net
, 局域网
, 文件
, 共享目录
访问
,以便于您获取更多的相关知识。

时间: 2024-09-12 07:23:04

asp.net实现访问局域网共享目录下文件的解决方法_实用技巧的相关文章

ASP.NET中访问DataGrid中所有控件值的方法_实用技巧

本文实例讲述了ASP.NET中访问DataGrid中所有控件值的方法.分享给大家供大家参考,具体如下: <%@ Page Language="C#" %> <%@ import Namespace="System.Collections" %> <script runat="server"> void Page_Load(Object sender, EventArgs e) { if(!Page.IsPost

asp.net网站防恶意刷新的Cookies与Session解决方法_实用技巧

本文实例讲述了asp.net网站防恶意刷新的Cookies与Session解决方法,是WEB程序设计中非常实用的技巧.分享给大家供大家参考.具体实现方法如下: Session版实现方法: public double time; public const int freetime = 1;//防刷冰冻时间间隔,当前为1秒 #region 防恶意刷新 if (Session.SessionID == null) { Response.End(); } else if (Session["sionid

ASP.NET在MVC中MaxLength特性设置无效的解决方法_实用技巧

本文实例讲述了ASP.NET在MVC中MaxLength特性设置无效的解决方法.分享给大家供大家参考.具体分析如下: 一.问题: 在ASP.NET MVC项目中,给某个Model打上了MaxLength特性如下: 复制代码 代码如下: public class SomeClass {     [MaxLength(16, ErrorMessage = "最大长度16")]     public string SomeProperty{get;set;} } 但在其对应的表单元素中并没有

asp.net无法加载oci.dll等错误的解决方法_实用技巧

解决方法一 修复方法: 1:找到oracle客户端的安装目录,例如:E:/oracle/ora92,选中目录,在"属性--安全"里面删掉"ASP .NET.Users用户"然后再添加进去,并赋予"完全控制或者修改权限":将everyone赋予"完全控制或者修改权限",注意:网站的目录权限也要设置为ervryone完全访问,不然oracle好了,网站同样访问不了.重新启动.2:最简单直接的方法是启用ASP .Net用户模拟,在w

asp.net URL中包含中文参数造成乱码的解决方法_实用技巧

问题: 前段时间,在系统中做了一个类似于友情链接的功能块,一直运行良好,直到有一天加了类似于以下的链接地址:http://www.****.com/user.aspx?id=水天,就出现大问题了: 1.从IE地址栏中直接输入这个地址,访问没错: 2.做一个静态页,其中包括这个超链接,点击访问也没错: 3.就是把这个链接添加到这个功能块中,点击访问那边接收到的是乱码. 一开始,被这个问题也搞得头大,在google了一把后,总算是把问题给搞清楚了,其实只要这个链接地址不经过任何编码传递是不会有问题的

asp.net中eval不能定义变量的问题的解决方法_实用技巧

复制代码 代码如下: eval.asp <%@ LANGUAGE='JAVASCRIPT'%> <script Language="javascript" runat=server> eval("var f1=1,f2=2,f3=3;"); Response.Write(f1+"<br/>"); Response.Write(f2+"<br/>"); Response.Write

ASP.NET在IIS7中上下文中不可用的解决方法_实用技巧

Johnny换上Win7已经有几个月的时间,不过前几天重装了系统,依旧用的是Win7,只是今天在打开VS2009工程后在IE中测试时一打开便出现一个错误如下: 请求在此上下文中不可用 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.Web.HttpException: 请求在此上下文中不可用 源错误: 复制代码 代码如下: 行 28: protected void Application

ASP.NET设置404页面返回302HTTP状态码的解决方法_实用技巧

在配置文件中配置404页面如下: 复制代码 代码如下: <customErrors mode="On" defaultRedirect="404.aspx"> <error statusCode="403" redirect="404.aspx" /> <error statusCode="404" redirect="404.aspx" /> <

ASP.NET导出Excel打开时提示:与文件扩展名指定文件不一致解决方法_实用技巧

"将页面显示的GridView中的数据,导出到Excel表格中"时遇到这样一个错误: C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致.具体提示如图: 解决办法:这里采用"修改注册表的方法"解决此问题,这并没从根上解决问题: 1.打开注册表编辑器方法:开始 -> 运行 -> 输入regedit -> 确定 2.找到注册表子项HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Exc