gpt4 book ai didi

asp.net-mvc-3 - 如何在 Asp.Net Mvc 3 中显示自定义错误页面?

转载 作者:行者123 更新时间:2023-12-03 11:06:51 25 4
gpt4 key购买 nike

我希望将所有 401 错误重定向到自定义错误页面。我最初在我的 web.config 中设置了以下条目。

<customErrors defaultRedirect="ErrorPage.aspx" mode="On">
<error statusCode="401" redirect="~/Views/Shared/AccessDenied.aspx" />
</customErrors>

使用 IIS Express 时,我收到 IIS Express 401 错误页面。

如果我不使用 IIS Express,则会返回一个空白页。使用 Google Chrome 的“网络”选项卡检查响应,我看到当页面为空白时,标题中会返回 401 状态

到目前为止,我所尝试的是使用来自 this SO answer 的建议。因为我使用的是 IIS Express 但无济于事。我尝试使用组合 <custom errors><httpErrors>运气不好 - 仍然显示标准错误或空白页。
httpErrors目前基于 the link 的部分看起来像这样来自 above SO question (我还发现了另一个非常 promising answer 但是没有运气 - 空白回复)
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough" >
<remove statusCode="401" />
<error statusCode="401" path="/Views/Shared/AccessDenied.htm" />
</httpErrors>

<!--
<httpErrors errorMode="Custom"
existingResponse="PassThrough"
defaultResponseMode="ExecuteURL">
<remove statusCode="401" />
<error statusCode="401" path="~/Views/Shared/AccessDenied.htm"
responseMode="File" />
</httpErrors>
-->
</system.webServer>

我什至修改了 applicationhost.config文件和修改 <httpErrors lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath"><httpErrors lockAttributes="allowAbsolutePathsWhenDelegated">基于来自 iis.net 的信息.在我努力的过程中,我还偶然发现了这个错误,如 another SO question 中所述。 .

如何在 Asp.Net Mvc 3 中显示自定义错误页面?

附加信息

以下 Controller 操作已使用 Authorize 修饰。特定用户的属性。
[HttpGet]
[Authorize(Users = "domain\\userXYZ")]
public ActionResult Edit()
{
return GetSettings();
}

[HttpPost]
[Authorize(Users = "domain\\userXYZ")]
public ActionResult Edit(ConfigurationModel model, IList<Shift> shifts)
{
var temp = model;
model.ConfiguredShifts = shifts;
EsgConsole config = new EsgConsole();

config.UpdateConfiguration(model.ToDictionary());
return RedirectToAction("Index");
}

最佳答案

我使用以下步骤:

// in Global.asax.cs:
protected void Application_Error(object sender, EventArgs e) {

var ex = Server.GetLastError().GetBaseException();

Server.ClearError();
var routeData = new RouteData();
routeData.Values.Add("controller", "Error");
routeData.Values.Add("action", "Index");

if (ex.GetType() == typeof(HttpException)) {
var httpException = (HttpException)ex;
var code = httpException.GetHttpCode();
routeData.Values.Add("status", code);
} else {
routeData.Values.Add("status", 500);
}

routeData.Values.Add("error", ex);

IController errorController = new Kavand.Web.Controllers.ErrorController();
errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
}

protected void Application_EndRequest(object sender, EventArgs e) {
if (Context.Response.StatusCode == 401) { // this is important, because the 401 is not an error by default!!!
throw new HttpException(401, "You are not authorised");
}
}

和:
// in Error Controller:
public class ErrorController : Controller {

public ActionResult Index(int status, Exception error) {
Response.StatusCode = status;
return View(status);
}

protected override void Dispose(bool disposing) {
base.Dispose(disposing);
}
}

和错误文件夹中的索引 View :
@* in ~/Views/Error/Index.cshtml: *@

@model Int32
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<title>Kavand | Error</title>
</head>
<body>
<div>
There was an error with your request. The error is:<br />
<p style=" color: Red;">
@switch (Model) {
case 401: {
<span>Your message goes here...</span>
}
break;
case 403: {
<span>Your message goes here...</span>
}
break;
case 404: {
<span>Your message goes here...</span>
}
break;
case 500: {
<span>Your message goes here...</span>
}
break;
//and more cases for more error-codes...
default: {
<span>Unknown error!!!</span>
}
break;
}
</p>
</div>
</body>
</html>

AND - 最后一步:
<!-- in web.config: -->

<customErrors mode="Off"/>

关于asp.net-mvc-3 - 如何在 Asp.Net Mvc 3 中显示自定义错误页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6733064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com