我提供从我的网站到用户的文件下载。当文件存在时,它工作正常。但是如果因任何原因删除了该文件,我在Visual Studio中会收到以下错误:
An exception of type 'System.IO.DirectoryNotFoundException' occurred in
mscorlib.dll but was not handled in user code
用户只需在网站上看到一个JSON字符串。
我使用此优惠:
var result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new StreamContent(
new FileStream(mediaFile.FilesystemLocation, FileMode.Open));
mediaFile.FilesystemLocation
就是这样:
public virtual string FilesystemLocation
{
get { return Path.Combine(FilesystemRoot, Id + "." + Extension); }
}
我尝试将整个事情放在try / catch块中,但之后它丢失了对其他类的所有引用。
所以我的问题是,如何处理此代码并防止出现此错误?
理想情况下,我只是想向用户显示一条消息,"找不到文件,请联系您的管理员"或类似的东西。
谢谢!
答案 0 :(得分:2)
System.IO.File.Exists
将成为你的朋友。在设置result.Content
之前请先调用它。如果文件不存在,该方法将返回false
,您可以相应地调整逻辑。
var filepath = mediaFile.FilesystemLocation;
if (!File.Exists(filepath))
{
return new HttpResponseMessage(404);
}
else{
var result = new HttpResponseMessage(HttpStatusCode.OK);
//just in case file has disappeared / or is locked for open,
//wrap in try/catch
try
{
result.Content = new StreamContent(
new FileStream(filepath, FileMode.Open));
}
catch
{
return new HttpResponseMessage(500);
}
return result;
}