Cách làm cho các trang lỗi tùy chỉnh hoạt động trong ASP.NET MVC 4


247

Tôi muốn một trang lỗi tùy chỉnh được hiển thị cho 500, 404 và 403. Đây là những gì tôi đã làm:

  1. Đã bật các lỗi tùy chỉnh trong web.config như sau:

    <customErrors mode="On" 
                  defaultRedirect="~/Views/Shared/Error.cshtml">
    
        <error statusCode="403" 
               redirect="~/Views/Shared/UnauthorizedAccess.cshtml" />
    
        <error statusCode="404" 
               redirect="~/Views/Shared/FileNotFound.cshtml" />
    
    </customErrors>
  2. Đăng ký HandleErrorAttributelàm bộ lọc hành động toàn cầu trong FilterConfiglớp như sau:

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new CustomHandleErrorAttribute());
        filters.Add(new AuthorizeAttribute());
    }
  3. Tạo một trang lỗi tùy chỉnh cho mỗi thông báo trên. Một mặc định cho 500 đã có sẵn trong hộp.

  4. Được khai báo trong mỗi chế độ xem trang lỗi tùy chỉnh mà mô hình cho trang là System.Web.Mvc.HandleErrorInfo

Đối với 500, nó hiển thị trang lỗi tùy chỉnh. Đối với những người khác, nó không.

Có điều gì tôi đang thiếu?

Có vẻ như đây không phải là tất cả để hiển thị các lỗi tùy chỉnh khi tôi đọc qua mã trong OnExceptionphương thức của HandleErrorAttributelớp và nó chỉ xử lý 500.

Tôi phải làm gì để xử lý các lỗi khác?


21
Điều kỳ lạ với thiết lập này là việc bạn chuyển hướng đến chế độ xem chứ không phải hành động của bộ điều khiển. Ví dụ, ai có nghĩa vụ đưa ra các quan điểm đó và vượt qua trong một mô hình? Chỉ cần suy nghĩ.
Oliver

2
Hầu hết các câu trả lời ở đây không xử lý tất cả các trường hợp hoặc khiến máy chủ web phản hồi theo cách "không chính xác" tức là chuyển hướng đến trang lỗi thay vì trả về phản hồi lỗi. Nếu bạn quan tâm đến việc máy chủ phản hồi theo cách mong đợi của các máy chủ web thì có một bài viết khá chi tiết về nó ở đây: benfoster.io/blog/aspnet-mvc-custom-error-pages . Được cảnh báo rằng nó không đơn giản như câu trả lời ở đây vì vậy nếu bạn muốn có một câu trả lời dễ dàng, chỉ cần sử dụng một trong những câu trả lời dưới đây.
rdans

1
Dưới đây là một bài viết tuyệt vời khác về các kỹ thuật khác nhau để xử lý lỗi asp.net dusty.codes/ từ
Godsayah

Câu trả lời:


352

Thiết lập hiện tại của tôi (trên MVC3, nhưng tôi nghĩ nó vẫn được áp dụng) phụ thuộc vào việc có ErrorController, vì vậy tôi sử dụng:

<system.web>
    <customErrors mode="On" defaultRedirect="~/Error">
      <error redirect="~/Error/NotFound" statusCode="404" />
    </customErrors>
</system.web>

Và bộ điều khiển chứa các mục sau:

public class ErrorController : Controller
{
    public ViewResult Index()
    {
        return View("Error");
    }
    public ViewResult NotFound()
    {
        Response.StatusCode = 404;  //you may want to set this to 200
        return View("NotFound");
    }
}

Và quan điểm chỉ là cách bạn thực hiện chúng. Tôi có xu hướng thêm một chút logic, để hiển thị theo dõi ngăn xếp và thông tin lỗi nếu ứng dụng ở chế độ gỡ lỗi. Vì vậy, Error.cshtml trông giống như thế này:

@model System.Web.Mvc.HandleErrorInfo
@{
    Layout = "_Layout.cshtml";
    ViewBag.Title = "Error";
}
<div class="list-header clearfix">
    <span>Error</span>
</div>
<div class="list-sfs-holder">
    <div class="alert alert-error">
        An unexpected error has occurred. Please contact the system administrator.
    </div>
    @if (Model != null && HttpContext.Current.IsDebuggingEnabled)
    {
        <div>
            <p>
                <b>Exception:</b> @Model.Exception.Message<br />
                <b>Controller:</b> @Model.ControllerName<br />
                <b>Action:</b> @Model.ActionName
            </p>
            <div style="overflow:scroll">
                <pre>
                    @Model.Exception.StackTrace
                </pre>
            </div>
        </div>
    }
</div>

7
Bạn có phải đặt bất cứ thứ gì vào Application_Error trong Global.asax cho Pablo này không?
Alicia

12
Mã trong bộ điều khiển dường như không thực thi từ kinh nghiệm của tôi. MVC4 - ném System.Exception vào một bộ điều khiển khác sẽ làm cho tệp Error.cshtml hiển thị, nhưng không thông qua ErrorContoder. Bất cứ ai khác trải nghiệm điều này?
Nilzor

53
Đối với bất cứ ai khác thấy điều này hữu ích, nhưng cần thêm bối cảnh; Thẻ <customErrors> nằm bên trong <system.web> trong web.config.
gooberverse

7
Cập nhật cho những người khác - rõ ràng là vấn đề của tôi đã xảy ra vì tôi đã có redirectMode="ResponseRewrite"trên CustomerErrorsyếu tố
KyleMit

42
Xin cho tình yêu của thần bỏ qua các bình luận nói //you may want to set this to 200trong mã. ĐỪNG LÀM THẾ!
Mất trí nhớ

40

Tôi đã thực hiện giải pháp pablo và tôi luôn gặp lỗi (MVC4)

Chế độ xem 'Lỗi' hoặc chủ của nó không được tìm thấy hoặc không có công cụ xem hỗ trợ vị trí tìm kiếm.

Để thoát khỏi điều này, loại bỏ dòng

 filters.Add(new HandleErrorAttribute());

trong FilterConfig.cs


Tôi nhìn khắp nơi để giải quyết điều này. Điều này cuối cùng đã có câu trả lời. Tôi biết tại sao nó lại làm điều đó nhưng vì cái quái gì tôi không thể, mà không suy nghĩ quyết liệt như những gì người khác đã nói. Tôi tưởng tượng tôi chia sẻ nỗi đau của 360Airwalk khi tôi nói cảm ơn vì đã chỉ ra điều này. Huyền thoại!
Adam

Đây là một tùy chọn và Trình điều khiển lỗi hoạt động tốt. Nhưng có vẻ như khi bạn đăng ký các bộ lọc trong FilterConfig.cs, nó sẽ tìm Error.cshtml trong các thư mục xem của bộ điều khiển gốc và bộ điều khiển gốc. Khi bạn thay đổi Error.cshtml thành bất cứ thứ gì khác ngoài ErrorControll tùy chỉnh của chúng tôi hoạt động. Nhưng có một nơi bạn có thể thêm đăng ký này và đó là global.asax.cs. Nếu bạn thêm dòng được đề cập trong hàm RegisterGlobalFilters (bộ lọc GlobalFilterCollection) trong global.asax.cs và xóa khỏi FilterConfig.cs, nó sẽ hoạt động.
isaolmez

Tôi nghĩ rằng nó có liên quan đến thứ tự đăng ký bộ lọc. Giữ bộ điều khiển lỗi và di chuyển đăng ký bộ lọc sang global.asax.cs. void static void RegisterGlobalFilters (bộ lọc GlobalFilterCollection) {bộ lọc.Add (new HandleErrorAttribution ()); }
isaolmez

24

Tôi làm một cái gì đó đòi hỏi ít mã hóa hơn các giải pháp khác được đăng.

Đầu tiên, trong web.config, tôi có các mục sau:

<customErrors mode="On" defaultRedirect="~/ErrorPage/Oops">
   <error redirect="~/ErrorPage/Oops/404" statusCode="404" />
   <error redirect="~/ErrorPage/Oops/500" statusCode="500" />
</customErrors>

Và bộ điều khiển (/Controllers/ErrorPageControll.cs) chứa các mục sau:

public class ErrorPageController : Controller
{
    public ActionResult Oops(int id)
    {
        Response.StatusCode = id;

        return View();
    }
}

Và cuối cùng, khung nhìn chứa các mục sau (loại bỏ để đơn giản, nhưng nó có thể conta:

@{ ViewBag.Title = "Oops! Error Encountered"; }

<section id="Page">
  <div class="col-xs-12 well">
    <table cellspacing="5" cellpadding="3" style="background-color:#fff;width:100%;" class="table-responsive">
      <tbody>
        <tr>
          <td valign="top" align="left" id="tableProps">
            <img width="25" height="33" src="~/Images/PageError.gif" id="pagerrorImg">
          </td>
          <td width="360" valign="middle" align="left" id="tableProps2">
            <h1 style="COLOR: black; FONT: 13pt/15pt verdana" id="errortype"><span id="errorText">@Response.Status</span></h1>
          </td>
        </tr>
        <tr>
          <td width="400" colspan="2" id="tablePropsWidth"><font style="COLOR: black; FONT: 8pt/11pt verdana">Possible causes:</font>
          </td>
        </tr>
        <tr>
          <td width="400" colspan="2" id="tablePropsWidth2">
            <font style="COLOR: black; FONT: 8pt/11pt verdana" id="LID1">
                            <hr>
                            <ul>
                                <li id="list1">
                                    <span class="infotext">
                                        <strong>Baptist explanation: </strong>There
                                        must be sin in your life. Everyone else opened it fine.<br>
                                    </span>
                                </li>
                                <li>
                                    <span class="infotext">
                                        <strong>Presbyterian explanation: </strong>It's
                                        not God's will for you to open this link.<br>
                                    </span>
                                </li>
                                <li>
                                    <span class="infotext">
                                        <strong> Word of Faith explanation:</strong>
                                        You lack the faith to open this link. Your negative words have prevented
                                        you from realizing this link's fulfillment.<br>
                                    </span>
                                </li>
                                <li>
                                    <span class="infotext">
                                        <strong>Charismatic explanation: </strong>Thou
                                        art loosed! Be commanded to OPEN!<br>
                                    </span>
                                </li>
                                <li>
                                    <span class="infotext">
                                        <strong>Unitarian explanation:</strong> All
                                        links are equal, so if this link doesn't work for you, feel free to
                                        experiment with other links that might bring you joy and fulfillment.<br>
                                    </span>
                                </li>
                                <li>
                                    <span class="infotext">
                                        <strong>Buddhist explanation:</strong> .........................<br>
                                    </span>
                                </li>
                                <li>
                                    <span class="infotext">
                                        <strong>Episcopalian explanation:</strong>
                                        Are you saying you have something against homosexuals?<br>
                                    </span>
                                </li>
                                <li>
                                    <span class="infotext">
                                        <strong>Christian Science explanation: </strong>There
                                        really is no link.<br>
                                    </span>
                                </li>
                                <li>
                                    <span class="infotext">
                                        <strong>Atheist explanation: </strong>The only
                                        reason you think this link exists is because you needed to invent it.<br>
                                    </span>
                                </li>
                                <li>
                                    <span class="infotext">
                                        <strong>Church counselor's explanation:</strong>
                                        And what did you feel when the link would not open?
                                    </span>
                                </li>
                            </ul>
                            <p>
                                <br>
                            </p>
                            <h2 style="font:8pt/11pt verdana; color:black" id="ietext">
                                <img width="16" height="16" align="top" src="~/Images/Search.gif">
                                HTTP @Response.StatusCode - @Response.StatusDescription <br>
                            </h2>
                        </font>
          </td>
        </tr>
      </tbody>
    </table>
  </div>
</section>

Nó chỉ đơn giản như vậy. Nó có thể dễ dàng được mở rộng để cung cấp thông tin lỗi chi tiết hơn, nhưng ELMAH xử lý điều đó đối với tôi & statusCode & statusDes mô tả là tất cả những gì tôi thường cần.


Tôi nghĩ rằng chuyển hướng trong tệp .config của "~ / ErrorPage / Oops / 404" có lẽ phải là "~ / ErrorPage / Oops? 404" phải không? Ít nhất đó là những gì làm việc cho tôi. Có lẽ điều đó chỉ phụ thuộc vào định tuyến.
Josh Sutterfield 4/12/2015

Làm thế nào để mô phỏng một lỗi được ném bởi IIS. Có thể là 500 hoặc 504. Phải làm gì trong ASP.Net MVC - 5 mã để mô phỏng ngoại lệ từ IIS để tôi có thể kiểm tra trang lỗi tùy chỉnh của mình
Không thể phá vỡ

12

Dường như có một số bước ở đây lộn xộn với nhau. Tôi sẽ đưa ra những gì tôi đã làm từ đầu.

  1. Tạo ErrorPagebộ điều khiển

    public class ErrorPageController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    
        public ActionResult Oops(int id)
        {
            Response.StatusCode = id;
            return View();
        }
    }
  2. Thêm chế độ xem cho hai hành động này (nhấp chuột phải -> Thêm chế độ xem). Chúng sẽ xuất hiện trong một thư mục có tên ErrorPage.

  3. Bên trong App_Startmở ra FilterConfig.csvà nhận xét bộ lọc xử lý lỗi.

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        // Remove this filter because we want to handle errors ourselves via the ErrorPage controller
        //filters.Add(new HandleErrorAttribute());
    }
  4. Bên trong web.config thêm các <customerErrors>mục sau , bên dướiSystem.Web

    <customErrors mode="On" defaultRedirect="~/ErrorPage/Oops">
        <error redirect="~/ErrorPage/Oops/404" statusCode="404" />
        <error redirect="~/ErrorPage/Oops/500" statusCode="500" />
    </customErrors>
  5. Kiểm tra (tất nhiên). Ném một ngoại lệ chưa được xử lý trong mã của bạn và xem nó đi đến trang có id 500, sau đó sử dụng URL tới một trang không tồn tại để xem 404.


Tôi đã nhận được lỗi này An exception occurred while processing your request. Additionally, another exception occurred while executing the custom error page for the first exception. The request has been terminated.Tất cả những gì tôi nhặt được từ mã của bạn đều nằm trong tệp web.config, tôi đã thêm <error redirect = "~/ControllerName/ActionName" statusCode="404"/>và nó hoạt động tốt :) Phần còn lại của mã là từ câu trả lời của @ Pablo. Tôi đang sử dụng MVC 5 và khung thực thể 6. Tôi đã không xóa filters.Add(new HandleErrorAttribute())khỏiFilterConfig.cs
sumedha

Làm thế nào để mô phỏng một lỗi được ném bởi IIS. Có thể là 500 hoặc 504. Phải làm gì trong ASP.Net MVC - 5 mã để mô phỏng ngoại lệ từ IIS để tôi có thể kiểm tra trang lỗi tùy chỉnh của mình
Không thể phá vỡ

Ngoài ra, làm thế nào để ném ngoại lệ chưa được xử lý (bước 5). Tôi mới viết mã xin vui lòng hướng dẫn.
Không thể phá vỡ

Vẫn không làm việc cho tôi? Còn việc định tuyến thì sao? Tôi có cần thêm trang Định tuyến cho Lỗi không? Nếu tôi nhấn trang: localhost: 84 / Enforcer / blah, tôi được chuyển hướng đến: localhost: 84 / Enforcer / Enforcer / Error / NotFound? Aspxerrorpath = / mật Trang lỗi giống như trang lỗi do Asp.NET cung cấp. Có ý kiến ​​gì không?
Radek Strugalski

Phần tử tùy chỉnh trong cấu hình web sẽ được sử dụng. Mã tuyến mặc định (do dự án tạo) của bạn sẽ hoạt động tốt.
VictorySaber

11

Tôi khuyên bạn nên sử dụng tệp Global.asax.cs.

 protected void Application_Error(Object sender, EventArgs e)
{
    var exception = Server.GetLastError();
    if (exception is HttpUnhandledException)
    {
        Server.Transfer("~/Error.aspx");
    }
    if (exception != null)
    {
        Server.Transfer("~/Error.aspx");
    }
    try
    {
        // This is to stop a problem where we were seeing "gibberish" in the
        // chrome and firefox browsers
        HttpApplication app = sender as HttpApplication;
        app.Response.Filter = null;
    }
    catch
    {
    }
}

1
Tôi không nghĩ bạn có thể thực hiện Server.Transfer () trong MVC. Bạn đang nghĩ OP có một trang web hỗn hợp?
Rap

1
Tại sao chúng ta nên sử dụng Application_Error trong mvc? Chúng tôi có các tùy chọn như [handerror] do các tùy chọn url chuyển hướng. Có bất kỳ lợi thế cụ thể nào với application_error không?
Kurkula

Chúng ta nên sử dụng HandleErrorAttribution trong MVC và bằng cách ghi đè phương thức OnException, chúng ta có thể xử lý chúng theo cách tốt hơn nhiều
Kumar Lachhani

7

Dựa trên câu trả lời được đăng bởi maxspan, tôi đã tập hợp một dự án mẫu tối thiểu trên GitHub hiển thị tất cả các phần làm việc.

Về cơ bản, chúng tôi chỉ cần thêm một Application_Errorphương thức vào global.asax.cs để chặn ngoại lệ và cho chúng tôi cơ hội chuyển hướng (hay chính xác hơn là chuyển yêu cầu ) sang trang lỗi tùy chỉnh.

    protected void Application_Error(Object sender, EventArgs e)
    {
        // See http://stackoverflow.com/questions/13905164/how-to-make-custom-error-pages-work-in-asp-net-mvc-4
        // for additional context on use of this technique

        var exception = Server.GetLastError();
        if (exception != null)
        {
            // This would be a good place to log any relevant details about the exception.
            // Since we are going to pass exception information to our error page via querystring,
            // it will only be practical to issue a short message. Further detail would have to be logged somewhere.

            // This will invoke our error page, passing the exception message via querystring parameter
            // Note that we chose to use Server.TransferRequest, which is only supported in IIS 7 and above.
            // As an alternative, Response.Redirect could be used instead.
            // Server.Transfer does not work (see https://support.microsoft.com/en-us/kb/320439 )
            Server.TransferRequest("~/Error?Message=" + exception.Message);
        }

    }

Trình điều khiển lỗi:

/// <summary>
/// This controller exists to provide the error page
/// </summary>
public class ErrorController : Controller
{
    /// <summary>
    /// This action represents the error page
    /// </summary>
    /// <param name="Message">Error message to be displayed (provided via querystring parameter - a design choice)</param>
    /// <returns></returns>
    public ActionResult Index(string Message)
    {
        // We choose to use the ViewBag to communicate the error message to the view
        ViewBag.Message = Message;
        return View();
    }

}

Trang lỗi Xem:

<!DOCTYPE html>

<html>
<head>
    <title>Error</title>
</head>
<body>

    <h2>My Error</h2>
    <p>@ViewBag.Message</p>
</body>
</html>

Không có gì khác liên quan, ngoài việc vô hiệu hóa / xóa filters.Add(new HandleErrorAttribute())trong FilterConfig.cs

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        //filters.Add(new HandleErrorAttribute()); // <== disable/remove
    }
}

Mặc dù rất đơn giản để thực hiện, nhưng một nhược điểm tôi thấy trong cách tiếp cận này là sử dụng chuỗi truy vấn để cung cấp thông tin ngoại lệ cho trang lỗi đích.


3

Tôi đã thiết lập mọi thứ, nhưng vẫn không thể thấy các trang lỗi thích hợp cho mã trạng thái 500 trên máy chủ dàn của chúng tôi, mặc dù thực tế mọi thứ đều hoạt động tốt trên các máy chủ phát triển cục bộ.

Tôi tìm thấy bài viết trên blog này từ Rick Strahl đã giúp tôi.

Tôi cần phải thêm Response.TrySkipIisCustomErrors = true;vào mã xử lý lỗi tùy chỉnh của tôi.


@ Shaun314 Ý bạn là bạn đặt mã đó ở đâu? Trong hành động xử lý yêu cầu. Bạn có thể xem các ví dụ trong bài viết trên blog đó.
DCShannon

2

Đây là giải pháp của tôi. Sử dụng [ExportModelStateToTempData] / [ImportModelStateFromTempData] theo tôi là không thoải mái.

~ / Lượt xem / Trang chủ / Error.cshtml:

@{
    ViewBag.Title = "Error";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Error</h2>
<hr/>

<div style="min-height: 400px;">

    @Html.ValidationMessage("Error")

    <br />
    <br />

    <button onclick="Error_goBack()" class="k-button">Go Back</button>
    <script>
        function Error_goBack() {
            window.history.back()
        }
    </script>

</div>

~ / Bộ điều khiển / HomeContoder.sc:

public class HomeController : BaseController
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Error()
    {
        return this.View();
    }

    ...
}

~ / Bộ điều khiển / BaseContoder.sc:

public class BaseController : Controller
{
    public BaseController() { }

    protected override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (filterContext.Result is ViewResult)
        {
            if (filterContext.Controller.TempData.ContainsKey("Error"))
            {
                var modelState = filterContext.Controller.TempData["Error"] as ModelState;
                filterContext.Controller.ViewData.ModelState.Merge(new ModelStateDictionary() { new KeyValuePair<string, ModelState>("Error", modelState) });
                filterContext.Controller.TempData.Remove("Error");
            }
        }
        if ((filterContext.Result is RedirectResult) || (filterContext.Result is RedirectToRouteResult))
        {
            if (filterContext.Controller.ViewData.ModelState.ContainsKey("Error"))
            {
                filterContext.Controller.TempData["Error"] = filterContext.Controller.ViewData.ModelState["Error"];
            }
        }

        base.OnActionExecuted(filterContext);
    }
}

~ / Bộ điều khiển / MyControll.sc:

public class MyController : BaseController
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Details(int id)
    {
        if (id != 5)
        {
            ModelState.AddModelError("Error", "Specified row does not exist.");
            return RedirectToAction("Error", "Home");
        }
        else
        {
            return View("Specified row exists.");
        }
    }
}

Chúc các bạn dự án thành công ;-)


2

Bạn có thể nhận được các lỗi hoạt động chính xác mà không cần hack toàn cầu.cs, gây rối với HandErrorAttribution, thực hiện Phản hồi.TrySkipIisCustomErrors, kết nối Application_Error hoặc bất cứ điều gì:

Trong system.web (chỉ thông thường, bật / tắt)

<customErrors mode="On">
  <error redirect="/error/401" statusCode="401" />
  <error redirect="/error/500" statusCode="500" />
</customErrors>

và trong system.webServer

<httpErrors existingResponse="PassThrough" />

Bây giờ mọi thứ sẽ hoạt động như mong đợi và bạn có thể sử dụng ErrorContoder của mình để hiển thị bất cứ thứ gì bạn cần.


Làm thế nào để mô phỏng một lỗi được ném bởi IIS. Có thể là 500 hoặc 504. Phải làm gì trong ASP.Net MVC - 5 mã để mô phỏng ngoại lệ từ IIS để tôi có thể kiểm tra trang lỗi tùy chỉnh của mình
Không thể phá vỡ

@Unbreakable tạm thời thay đổi mã của bạn để ném một ngoại lệ.
theycallmemorty

Không làm cho tôi một sự khác biệt. Tôi không được đưa đến trang lỗi tùy chỉnh của mình do ngoại lệ hoặc 404 không tìm thấy lỗi.
pnizzle

0

Có vẻ như tôi đến bữa tiệc muộn, nhưng bạn cũng nên kiểm tra điều này.

Vì vậy, system.webđể lưu vào bộ đệm ngoại lệ trong ứng dụng, chẳng hạn như trả về httpNotFound ()

  <system.web>
    <customErrors mode="RemoteOnly">
      <error statusCode="404" redirect="/page-not-found" />
      <error statusCode="500" redirect="/internal-server-error" />
    </customErrors>
  </system.web>

system.webServerđể bắt kịp các lỗi đã bị IIS bắt và không truy cập vào khung asp.net

 <system.webServer>
    <httpErrors errorMode="DetailedLocalOnly">
      <remove statusCode="404"/>
      <error statusCode="404" path="/page-not-found" responseMode="Redirect"/>
      <remove statusCode="500"/>
      <error statusCode="500" path="/internal-server-error" responseMode="Redirect"/>
  </system.webServer>

Trong phần cuối cùng nếu bạn lo lắng về phản hồi của máy khách thì hãy thay đổi responseMode="Redirect"thành responseMode="File"và cung cấp tệp html tĩnh, vì trang này sẽ hiển thị một trang thân thiện với mã phản hồi 200.


0

Trong web.config thêm điều này dưới thẻ system.webserver như bên dưới,

<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Replace">
  <remove statusCode="404"/>
  <remove statusCode="500"/>
  <error statusCode="404" responseMode="ExecuteURL" path="/Error/NotFound"/>
  <error statusCode="500" responseMode="ExecuteURL"path="/Error/ErrorPage"/>
</httpErrors>

và thêm một bộ điều khiển như,

public class ErrorController : Controller
{
    //
    // GET: /Error/
    [GET("/Error/NotFound")]
    public ActionResult NotFound()
    {
        Response.StatusCode = 404;

        return View();
    }

    [GET("/Error/ErrorPage")]
    public ActionResult ErrorPage()
    {
        Response.StatusCode = 500;

        return View();
    }
}

và thêm quan điểm tôn trọng của họ, điều này chắc chắn sẽ hoạt động tôi đoán cho tất cả.

Giải pháp này tôi tìm thấy nó từ: Sao Hải Vương

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.