2010-03-16 161 views
2

我在asp.net web应用程序中有几个xml文件,我不想让任何人访问除我的服务器端代码以外的其他文件。这就是我想..http处理程序不在web服务器上工作,但在localhost上工作

<add verb="*" path="*.xml" type="System.Web.HttpForbiddenHandler" /> 

我写这个的< HttpHandlers的内部>

它运作良好,在本地主机,但不能在服务器......没有任何犹豫的服务器显示XML文件...我不知道如何着手?

在此先感谢.. :)

更新:服务器有II S6,windows server 2003

回答

2

您应该检查什么其他的处理程序是服务器上的活动,并影响.xml文件,包括一般的像<add verb="*" path="*" ...

此外,检查服务器配置为指向:httpHandlers Element (ASP.NET Settings Schema)

Microsoft Internet信息服务(IIS)具有自己的模型,用于将扩展映射到ISAPI。对于给定应用程序扩展和其处理程序之间的映射生效,扩展必须在IIS中映射到ASP.NET ISAPI。对于非标准扩展,例如自定义扩展,您必须相应地配置IIS。

UPDATE:Protecting Files with ASP.NET

+0

我检查得很好,没有什么与我的特定处理程序相冲突 – ZX12R 2010-03-16 06:47:00

+1

@ ZX12R:你真的检查过xml文件是否映射到服务器上的ASP.NET ISAPI扩展? – alexandrul 2010-03-16 07:48:04

+0

可以请你告诉我如何做一个彻底的映射检查。 – ZX12R 2010-03-16 08:30:18

2

你可以把它们放在特殊的App_Data目录中。此文件夹内的文件不被提供。

+0

我不认为这是完美的解决方案。它会工作,但只是一个解决方法。 – ZX12R 2010-03-16 06:53:08

+0

对此答案+1;这不是一个解决方法,它是完美的用法App_Data – bgs264 2010-03-16 12:06:53

0

有关使用<location>标签是什么?

<configuration> 
    <location path="something.xml"> 
     <system.web> 
     <authorization> 
      <deny users="*"/> 
     </authorization> 
     </system.web> 
    </location> 
</configuration> 
+0

我不认为我完全理解,应该将标记放置在配置根目录下。?我认为每个配置文件只允许有一个元素。我和解释.. – ZX12R 2010-03-16 06:45:03

+0

是的,实际上,我建议使用web.config中提到的位置标记,并指出XML的路径。然后在您的auth标签中,指定拒绝用户= *。我没有检查它,但我希望它能工作 – 2010-03-16 06:53:38

+0

它在localhost中工作,但在服务器失败.. !! – ZX12R 2010-03-16 07:08:18

1

IIS 6 & Visual Studio的内置Web服务器寄存器事情有点不同于IIS 7,如果你的主机运行IIS 7,您可能需要您注册加入到<system.WebServer>节点在你的web.config文件。

<system.webServer> 
    <handlers> 
    <add ... /> 
    </handlers> 
</system.webServer> 
+0

已更新我的问题...服务器使用IIS6 .. – ZX12R 2010-03-16 07:09:12

+0

如果是这样的话,@ alexandrul的答案可能是正确的。 IIS直接处理所有文档请求,除非映射到其他处理程序。许多托管提供商都提供控制面板,您可以在其中将文件扩展名映射到特定处理程序 – 2010-03-16 07:58:40

0

我也遇到了类似的问题。在我的本地主机,crud操作工作正常,并在网格上显示数据,但同样不适用于虚拟机中托管的url,表现怪异, 原因: 我一直接着调用处理程序,再次调用一个更多的处理程序在这两个调用中显示网格中的数据保存正常发生,但显示处理程序不是只在提琴手中打。 Sol: 所以我试图以保存显示的回调序列化格式发送数据,这解决了我的问题,它只是一个快速修复,不知道为什么它不工作。

理想情况下,处理程序的多个调用应该可以工作,但是如果您调用多个处理程序后可能会发生另一个问题,而不是尝试仅在一次调用中获取数据,它可能会帮助您解决问题。

相关问题