ASP.NET HTTPHandler 在预期异常时不会抛出异常
我有一个 HttpHandler 类(实现 IHttphandler),其中在 web.config 中为处理程序定义的路径是 *.jpg。我要求在我的页面中提供 Jpg 图像。在 HTTP 处理程序中,我正在写入文件系统中的文件。我错误地试图写入一个不存在的目录。这应该引发异常,但执行只是继续进行。当然,没有写入任何文件。但如果我给出一个正确的目录,文件就会正确写入。HttpHandler 异常有什么特别之处吗? 查看部分代码
public void ProcessRequest(HttpContext context){
File.WriteAllLines(context.Request.ApplicationPath+@"\"+"resul.log",new string[]{"Entered JPG Handler"});
如果我在 File.WriteAllLines 语句上放置断点,然后单步执行它,我可以看到发生异常。
I have an HttpHandler class (implements IHttphandler) where the path defined for the handler in web.config is *.jpg. I am requesting a Jpg image in my page. Within the HTTP Handler I am writing to a file in the filesystem. By mistake I was trying to write to a non existant directory. This should have thrown an exception but the execution simply proceeds.Ofcourse no file is written. But if I give a proper directory the file is written correctly.Is there anything special about HttpHandler Exceptions.
See part of the code
public void ProcessRequest(HttpContext context){
File.WriteAllLines(context.Request.ApplicationPath+@"\"+"resul.log",new string[]{"Entered JPG Handler"});
If I put a breakpoint on the File.WriteAllLines statement and then step over it I can see an exception occurring.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Request.Application 返回应用程序的虚拟应用程序服务器上的根路径。例如:“/YourApp”,而不是“C:\inetpub\wwwroot\YourApp”。
可能发生的情况是 File.WriteLine(...) 实际上将文件写入某处,可能与 Web 服务器进程位于同一文件夹中。
编辑:以下是一些可能需要检查的地方:
如果使用内置 VS2008 Web 服务器
C:\Program Files (x86)\Common
Files\microsoft shared\DevServer\9.0
如果使用内置 VS2010 Web 服务器
C:\Program Files (x86)\Common
Files\microsoft shared\DevServer\10.0
如果使用 IIS
C:\Windows\System32\inetsrv
或C:\Windows\SysWOW64\inetsrv
Request.Application returns the application's virtual application root path on the server. For example: "/YourApp", as opposed to "C:\inetpub\wwwroot\YourApp."
What's likely happening is File.WriteLine(...) is actually writing the file somewhere, probably in the same folder as your web server process.
EDIT: Here's some of the likely places to check:
if using built-in VS2008 web server
C:\Program Files (x86)\Common
Files\microsoft shared\DevServer\9.0
if using built-in VS2010 web server
C:\Program Files (x86)\Common
Files\microsoft shared\DevServer\10.0
if using IIS
C:\Windows\System32\inetsrv
orC:\Windows\SysWOW64\inetsrv
ASP.NET 可能仅拦截 ASP.NET 文件扩展名(如 .aspx),而不处理其他类型的内容(即,您的 jpeg 可能被完全跳过)。
这些是映射到 ASP.NET 进行处理的常规文件扩展名。
您可能需要将 IIS 中的其他文件扩展名(如 .jpeg、.jpg 等)映射到 ASP.NET 处理器 - 这篇 Microsoft 文章介绍了具体操作方法。
ASP.NET might only be intercepting ASP.NET file extensions like .aspx and not processing other types of content (i.e. maybe your jpegs are being skipped altogether).
These are the regular file extensions mapped to ASP.NET for processing.
You might have to map other file extensions (like .jpeg, .jpg, etc) in IIS to the ASP.NET processor - This Microsoft article tells how.