允许对App_Data的请求

lev*_*evi 5 c# asp.net iis web-config

我想允许用户请求位于App_Data文件夹中的文件.这是错误:

错误摘要

HTTP错误404.8 - 未找到

请求过滤模块配置为拒绝URL中包含hiddenSegment部分的路径.

Nit*_*ant 6

它不能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>
Run Code Online (Sandbox Code Playgroud)

检查这个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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


下载:App_Data访问示例

  • 这个答案只有一半是真的:您可以让请求过滤模块允许该路径. (3认同)

R2D*_*2D2 5

不建议这样做,因为应用程序数据用于应用程序文件,但这可以通过将以下行添加到配置中来完成

  <system.webServer>
    <security>
      <requestFiltering>
        <hiddenSegments>
          <remove segment="app_data" />
        </hiddenSegments>
      </requestFiltering>
    </security>
  </system.webServer>
Run Code Online (Sandbox Code Playgroud)