我如何设置我的ASP.NET项目来查找我的文件?

时间:2010-01-05 08:44:07

标签: asp.net

编辑我不想重定向网页,特定文件等。我想更改从根源目录到我选择的目录中存储图像,视频和其他媒体的路径 。在这种情况下c:/ dev / prjfiles / prjname / public(c:/ dev / prjfiles / prjname /是我的工作目录)和我除了当我的html执行img src =“/ pic.png”时它会找到图像C:/dev/prjfiles/prjname/publi/pic.png。我需要一个有效的解决方案,我试着看看如何设置虚拟目录等。我无法弄明白。因此赏金。我正在生成html,我不是在写 asp:image runat="server"等我从数据库中提取数据并输出html。仍然是WIP的部分是处理POST请求的代码。 html已经存在,但我无法在site.com/here污染我的源目录(c:/ dev / trunk / thisprj / thisprj / 我的.aspx文件,我不希望500 .png)中有数百个文件/ gif / jpg here

我不知道如何设置asp.net环境。我假设我有一个无法从网上获得的根路径,一个bin /我可以把我的asp.net dll和一个公共文本放在我想要的任何文件中。

我想将我的项目文件从其他所有内容中分离出来。我的JS,css和图像文件在prjfiles / prjname / public中,我的sqlite db在prjfiles / prjname /中,而额外的二进制文件在prjfiles / prjname / bin中。

当我运行我的应用程序并尝试加载图像时出现问题。例如/cssimg/error.png。我的项目在我/ public文件夹中找不到资源,我不知道如何让它找到它们。如何设置我的项目呢?

注意:我将工作目录路径设置为prjfiles / prjname /。在代码中我写了./bin/extrabin.exe和db.sqlite3,它们正确地访问文件。

7 个答案:

答案 0 :(得分:5)

您可能希望观看ASP.NET的入门视频

http://www.asp.net/get-started/

编辑:添加了更多信息

正如@Murph建议的那样,你的假设是不正确的。 IIS负责阻止对任何重要文件和文件夹的HTTP访问,例如App_Code中的* .aspx.cs和* .cs,任何DLL,App_Data目录下的任何内容和web.config。

内容文件,例如* .html,* .css,*。js,.gif,.jpg,.png都以正常方式提供。

通过这种方式,不需要“公共”文件夹。

答案 1 :(得分:4)

  

我不知道如何设置asp.net环境。我假设我有一个无法从网上获得的根路径,一个bin /我可以把我的asp.net dll和一个公共文本放在我想要的任何文件中。

这是错误的假设!

  • 您有一个根文件夹,可以公开使用。您将IIS或ASP.NEt开发服务器设置为此文件夹。
  • (可选,但始终需要)您在此根文件夹中有一个web.config文件,用于配置
  • 您的程序集有一个bin文件夹(每个页面或用户控件“include”编译成一个类)
  • (可选)您将App_Data作为基于文件的数据库和/或其他数据文件(例如XML存储,...)的默认文件夹。
  • (可选)您有一个App_theme文件夹,用于样式和图像。阅读有关ASP.NET主题的内容。
  • (可选)如果要添加要由服务器编译的类,可以添加App_Code文件夹。
  • 您可以为脚本等创建文件夹......

通常对于复杂的逻辑等。您在根目录外的单独项目中创建,并在bin文件夹中引用结果程序集。

说真的,如果没有IDE或手册,就无法进行ASP.NET工作。 Visual Web Developer 2008 Express IDE是免费的,http://asp.net有大量资源可供入门。

答案 2 :(得分:2)

我不知道我的问题是否正确,但也许您可以尝试<BASE> HTML标记。

  

HTML <base>代码

     

“为页面上的所有链接指定默认网址和默认目标”

在W3Schools check it out,有一个很好的简单例子。

否定的一面是,您需要在每个页面中添加<BASE>标记。

答案 3 :(得分:1)

听起来你应该能够创建一个虚拟目录来做你想要的 - 但这是一个非常非标准的设置。

请记住,IIS将阻止用户下载DLL和其他项目级文件,因此您通常不需要在单独的图层中对它们进行分区。

例如,只需在项目的顶层有一个cssimg文件夹,并跳过整个公用文件夹。

答案 4 :(得分:1)

我知道你来自哪里。 ASP.NET项目的设置与您对它们的处理方式略有不同,但您可以使它们按您的需要工作。
ASP.NET项目 IS 的根目录可公开访问。在Visual Studio中创建WebSite时,它在根目录上创建了一个default.aspx页面。你在IIS托管?如果是这样,它默认设置为提供default.aspx。但我离题了。

以下是如何让它像你想要的那样工作(主要是):
创建一个WebSite,然后右键单击该站点并添加名为“prjfiles”的文件夹。右键单击该文件夹,然后创建另一个名为“public”的文件夹。创建另一个名为“cssimg”的子文件夹。
现在,如果你想使用你提到的图像,你可以像这样引用它:“〜/ prjfiles / public / cssimg / error.png”(以root开头的路径)或“./cssimg/error.png”如果您来自公共文件夹中的页面(相对路径)。

但实际上,你做的工作太多了。以下是如何以更少的努力使其工作:
创建您的WebSite,右键单击该项目并添加名为“cssimg”的文件夹。
像处理“公共”文件夹一样处理根目录 - 根据需要将页面放在根目录或子文件夹中。您现在可以引用相同的图像文件:“./ cssimg / error.png”(相对)或“〜/ cssimg / error.png”(从根开始)

还有另一种方法可以告诉引擎在哪里查找资源,但它适用于您的css文件。在“head”标签内,你可以添加一个“style”元素(type =“text / css”),在里面你可以添加如下内容:@import'&lt;%= ResolveUrl(“〜/ prjfiles / public /cssimg/styles.css“)%&gt;';

祝你好运!

答案 5 :(得分:1)

如果我正确理解了您的问题,那么您正在尝试查找未物理存储在文件系统文件夹中的文件,或者保留在其他文件夹中。您可以通过实施UrlRewrite机制来处理这些问题。

我建议您阅读URL Rewriting in ASP.NET,之后,请先了解此实施:A Complete URL Rewriting Solution for ASP.NET 2.0

答案 6 :(得分:0)

如果我理解了这一切(请对任何更正进行评论),现在所有文件都在根目录中,并且您使用<img src="/img.png" />并且它可以正常工作。

如果是这种情况,请在图像所在的目录中创建另一个目录,比如调用该目录images并将图像文件放在那里。现在使用<img src="/images/img.png" />

完成。