【问题标题】:Exception cant be casted to HttpException异常不能转换为 HttpException
【发布时间】: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


    【解决方案1】:

    您可以使用此代码来捕获不同类型的异常

    try {
    // code
    }
    catch (HttpException ex){
    // code
    }
    catch (Exception ex){
    // code
    }
    

    【讨论】:

    • 嗨,Artur,我知道,问题是 catch(HttpException) 没有被捕获,HttpException 被捕获为异常......
    • @RuiEstreito 也许它抛出了其他类型的异常。你能在调试器中检查它吗?
    • 我已经检查过了,并且所有异常属性都是空的,我无法调试,因为问题是在暂存环境中,在我的本地机器上正常工作,如果我使用不同的异常,问题是一样的。
    猜你喜欢
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 2020-10-21
    • 2018-02-26
    • 2020-02-11
    相关资源
    最近更新 更多