【发布时间】:2018-10-28 18:08:19
【问题描述】:
任何人都可以解释当我抛出 HttpException,当它冒泡时,不能从 Exception 中抛出的原因。 提供更多上下文,我有一个带有 try..catch 异常的通用剃刀视图,它调用子视图,在子视图中我抛出了 HttpException。 问题是,在一般视图中,异常在引发时不能被强制转换为 HttpException。 这只发生在测试环境中,在我的本地机器上可以正常工作(如预期的那样)。
代码:
儿童视图:
...
}
else
{
throw new HttpException(400,"Not Found");
}
通用视图
try
{
@Html.CachedPartial(moduleItem.DocumentTypeAlias, moduleItem, 60 * 60 * 24 * 365,
contextualKeyBuilder: (model, viewData) => { return string.Format("{0}|{1}", moduleItem.Id, Request.QueryString); },
viewData: ViewData)
}
catch (Exception ex)
{
//the ex.GetType() is Exception when HttpException is raised
if (ex != null && ex.GetType()== typeof(HttpException))
{
var httpExp = ex as HttpException;
var code = httpExp.GetHttpCode();
if (code == 400)
{
HttpContext.Current.Response.StatusCode = (int)HttpStatusCode.NotFound;
var xpathQuery = String.Format("//error404");
var umbracoHelper = new UmbracoHelper(UmbracoContext.Current);
var contentService = umbracoHelper.TypedContentAtXPath(xpathQuery);
var culture = System.Threading.Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName;
var moduleItem404 = contentService.FirstOrDefault(x=> x.GetCulture().TwoLetterISOLanguageName== culture);
@Html.CachedPartial(moduleItem404.DocumentTypeAlias, moduleItem404, 60 * 60 * 24 * 365,
contextualKeyBuilder: (model, viewData) => { return string.Format("{0}|{1}", moduleItem404.Id, Request.QueryString); },
viewData: ViewData)
}
else
{
throw ex;
}
}
else
{
throw ex;
}
任何想法,提前致谢。
【问题讨论】:
标签: c# asp.net asp.net-mvc exception-handling