如何在.NET 3.5中设置目录权限?

时间:2014-01-31 07:09:57

标签: asp.net .net iis asp.net-3.5

我是.NET的新手。当我上传图片时,我收到错误

  

System.UnauthorizedAccessException的:
  访问路径'C:\ Inetpub \ vhosts \ cmcnoida.com \ httpdocs \ i_image \ 123'被拒绝。

此代码非常适用于本地,但在上面的实时服务器上生成错误。我该怎么办?

我的代码:

protected void Button1_Click(object sender, EventArgs e)
{
    string t_sname, t_cname, t_pack, t_college, t_djoin;

    if (TextBox2.Text == "")
    { t_sname = "-"; }
    else
    { t_sname = TextBox2.Text; }
    if (TextBox3.Text == "")
    { t_cname = "-"; }
    else
    { t_cname = TextBox3.Text; }
    if (TextBox4.Text == "")
    { t_pack = "-"; }
    else
    { t_pack = TextBox4.Text + " lacs pa"; }
    if (TextBox5.Text == "")
    { t_college = "-"; }
    else
    { t_college = TextBox5.Text; }
    if (TextBox6.Text == "")
    { t_djoin = "-"; }
    else
    { t_djoin = TextBox6.Text; }

    // conn = new SqlConnection("Data Source=USER-PC;Initial Catalog=cmcnoida;Integrated Security=True");
    conn = new SqlConnection("Data Source=127.0.0.1;Integrated Security=False;User ID=kvch_db;Connect Timeout=200;Encrypt=False;Packet Size=4096;Database=cmcnoida;password=kv_12_2014");
    //conn = new SqlConnection("server=singhal;database=abc;Trusted_Connection=yes");
    comm = new SqlCommand();
    comm.Connection = conn;
    comm.CommandText = "select max(id) from placement";
    conn.Open();
    int i = (int)comm.ExecuteScalar();
    conn.Close();
    string a = (i + 1).ToString();

    DirectoryInfo dd2 = new DirectoryInfo(Server.MapPath("~\\i_image\\" + a));

    dd2.Create();
    dd2.Refresh();

    string fup;
    if (FileUpload1.HasFile == true)
    {
        fup = "~\\i_image\\" + a + "\\" + FileUpload1.FileName;
        FileUpload1.PostedFile.SaveAs(Server.MapPath(fup));
    }
    else
    {
        fup = "~\\i_image\\" + a + "\\dummy-man.jpg";
        File.Copy(Server.MapPath("~\\admin\\dummy-man.jpg"), Server.MapPath("~\\i_image\\" + a + "\\dummy-man.jpg"));
    }
    comm.Connection = conn;
    comm.CommandText = "insert into placement values('" + t_sname + "','" + t_cname + "','" + t_pack + "','" + t_college + "','" + t_djoin + "','" + fup + "')";
    conn.Open();
    comm.ExecuteNonQuery();
    conn.Close();
    // binddatagrid();
    TextBox2.Text = "";
    TextBox3.Text = "";
    TextBox4.Text = "";
    TextBox5.Text = "";
    TextBox6.Text = "";
    TextBox2.Focus();
    Response.Write("<script language=JavaScript> alert('Placement Record Inserted !!'); </script>");
}

我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:0)

如果您在服务器上托管此内容,则需要设置该文件夹的权限。以下是对What are all the user accounts for IIS/ASP.NET and how do they differ?

的好读

但我怀疑不是这里的情况。我想你是在这里的共享环境中托管它 如果是这种情况,则无法使用代码设置服务器文件夹安全权限。因此,您必须联系您的托管服务提供商,并要求他们授予i_image文件夹的权限。

我提到了i_image文件夹,因为子文件夹123在您的代码中看起来是动态的。设置根文件夹的权限就足够了。

答案 1 :(得分:0)

在许多涉及访问安全性的情况下,您需要使用ASP.NET模拟(作为Windows用户帐户运行)。然后,您需要在web.config中进行一些更改。

<configuration>
  <system.web>
    <identity impersonate="true"/>
  </system.web>
</configuration>

<identity impersonate="true" userName="DOMAIN\UserName" password="***" />

您需要提供对您要写入的文件夹具有写访问权限的用户凭据。

这些设置也可以在应用程序池的IIS中完成。