1

浏览此主题的 100 个链接后,我找不到解决问题的方法。我正在手动处理 404 自定义错误页面,如下所示

当我在地址栏中输入任何错误的 url 并正确显示 404 错误页面时,我的以下解决方案有效。但是当我输入http://localhost:57101/p/anyhttp://localhost:57101/p/123 显示网页不可用时。对于第一个参数 id 的错误不能包含空条目。第二个是产品ID,它被删除所以产品为空,所以我在那里抛出手动异常。

我的 web.config 设置是

<customErrors mode="On" redirectMode="ResponseRedirect">
    </customErrors>

我处理 404 错误的代码

 protected void Application_Error(Object sender, EventArgs e)
        {

            //LogException(Server.GetLastError());

            try
            {
                var exception = Server.GetLastError();
                LogException(exception);
                var httpException = exception as HttpException;
                Response.Clear();
                Server.ClearError();
                var routeData = new RouteData();
                routeData.Values["controller"] = "Errors";
                routeData.Values["action"] = "General";
                routeData.Values["exception"] = exception;
                Response.StatusCode = 500;
                if (httpException != null)
                {
                    Response.StatusCode = httpException.GetHttpCode();
                    switch (Response.StatusCode)
                    {
                        case 403:
                            routeData.Values["action"] = "Http403";
                            break;
                        case 404:
                            routeData.Values["action"] = "Http404";
                            break;
                    }
                }
                else
                {
                    Response.StatusCode = 404;
                    routeData.Values["action"] = "Http404";
                }

                IController errorsController = new Nop.Web.Controllers.ErrorsController();
                var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
                errorsController.Execute(rc);
            }
            catch { }

            #endregion
            //log error

        }

当我尝试浏览任何不存在的路线时,上面的代码有效。但是当我抛出异常如下

我的错误控制器是

public class ErrorsController : Controller
    {
        //
        // GET: /Errors/

        public ActionResult General(Exception exception)
        {
            Response.ContentType = "text/html";
            Response.TrySkipIisCustomErrors = true;
            return View();
        }

        public ActionResult Http404()
        {
            //return Content("Not found", "text/plain");
            Response.ContentType = "text/html";
            Response.TrySkipIisCustomErrors = true;
            return View();
        }

        public ActionResult Http403()
        {
            Response.ContentType = "text/html";
            Response.TrySkipIisCustomErrors = true;
            return View();
        }
    }


public ActionResult Product(int productId)  
        {

            var product = _productService.GetProductById(productId);


            if(product==null)
                throw new HttpException(404, "Product does not exists");

          }

它显示“此网页不可用”。

我也想保留 url,就像它一样stackoverflow

有关此的任何帮助。

4

0 回答 0