2012-05-09 179 views
3

我想允許用戶請求位於App_Data文件夾中的文件。這是錯誤:允許請求到App_Data

Error Summary

HTTP Error 404.8 - Not Found

The request filtering module is configured to deny a path in the URL that contains a hiddenSegment section.

+2

爲什麼你想做到這一點的配置來完成? – walther

回答

5

它不可能App_Data文件夾直接訪問,因爲它被用作數據存儲爲Web應用程序,你可以從它僅使用的ConnectionString訪問數據庫中的存儲數據的安全性的原因。

的web.config

<connectionStrings> 
    <add name="AddressBookConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\myDB.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient"/> 
</connectionStrings> 

檢查這個http://www.codeproject.com/Articles/31557/A-Beginner-s-Guide-to-ASP-NET-Application-Folders#h

UPDATE
編程方式,我們可以訪問Web應用程序的任何文件,並將其寫入響應:

public class FileAccessHandler:IHttpHandler 
{ 
    public FileAccessHandler() 
    { 
     // 
     // TODO: Add constructor logic here 
     // 
    } 

    public bool IsReusable 
    { 
     get { return false; } 
    } 

    public void ProcessRequest(HttpContext context) 
    { 
     String FileName = Path.GetFileName(context.Request.PhysicalPath); 
     String AssetName = HttpContext.Current.Request.MapPath(Path.Combine(HttpContext.Current.Request.ApplicationPath, "App_Data/" + FileName)); 

     if (File.Exists(AssetName)) 
     { 
      context.Response.ContentType = "image/jpeg"; 
      context.Response.BinaryWrite(File.ReadAllBytes(AssetName)); 
      context.Response.End(); 
     } 
    } 
} 


Download: App_Data access sample

+3

這個答案只是半真:你可以讓請求過濾模塊允許這個路徑。 – usr

+0

解答已更新。 –

+0

儘管這篇文章很久以前就已經完成了,但這對我有幫助!經過許多小時的掙扎之後,他們認爲Hosting公司限制訪問權限,或者因爲RadAjaxPanel導致問題而不得不添加信任級別或嘗試進行更改......這一切都歸結爲無法訪問App_Data文件夾!謝謝! – AxleWack

1

這是不推薦的應用程序的數據是爲應用程序文件,但是這可以通過添加以下行來

<system.webServer> 
    <security> 
     <requestFiltering> 
     <hiddenSegments> 
      <remove segment="app_data" /> 
     </hiddenSegments> 
     </requestFiltering> 
    </security> 
    </system.webServer>