我正在使用RC2
使用URL路由:
routes.MapRoute(
"Error",
"{*url}",
new { controller = "Errors", action = "NotFound" } // 404s
);
Run Code Online (Sandbox Code Playgroud)
以上似乎照顾这样的请求(假设默认路由表由初始MVC项目设置):"/ blah/blah/blah/blah"
覆盖控制器本身中的HandleUnknownAction():
// 404s - handle here (bad action requested
protected override void HandleUnknownAction(string actionName) {
ViewData["actionName"] = actionName;
View("NotFound").ExecuteResult(this.ControllerContext);
}
Run Code Online (Sandbox Code Playgroud)
但是,之前的策略不处理对Bad/Unknown控制器的请求.例如,我没有"/ IDoNotExist",如果我请求这个,我从Web服务器获取通用404页面而不是我的404,如果我使用路由+覆盖.
最后,我的问题是: 有没有办法在MVC框架中使用路由或其他东西来捕获这种类型的请求?
或者我应该默认使用Web.Config customErrors作为我的404处理程序并忘记所有这些?我假设如果我使用customErrors,由于Web.Config对直接访问的限制,我必须在/ Views之外存储通用404页面.
是否有可能创建一个捕获所有的最终路由...并将用户弹回到ASP.NET MVC中的404视图?
注意:我不想在我的IIS设置中进行此设置.
我正在尝试在我的MVC 4应用程序中实现自定义错误处理.我不确定我的web.config <customErrors>中应该去哪里,以及我需要包含在其中的一般信息.
如果没有框架抛出异常500错误代码,我怎么能处理404错误?
我在Microsoft Visual Studio Express 2013 for Web中创建了一个新项目.它是一个ASP.NET MVC 5 - .NET Framework 4.5项目.
我想处理(无法找到资源):

我确实使用下面的代码处理它.
如果我执行类似(/ Home/kddiede/ddiij)或(/ djdied/djie/djs)的操作,此代码将起作用,这将导致显示我的自定义错误页面.
但是,当我尝试执行类似(/ Home/kddiede/ddiij/dfd/sdfds/dsf/dsfds/fd)或任何长的不存在的URL时,它会向我显示:

代码来自:http://www.codeproject.com/Articles/635324/Another-set-of-ASP-NET-MVC-4-tips
技巧16:自定义错误屏幕
错误页面位于/View/Shared/Error.cshtml中
Web.config文件
<system.web>
<customErrors mode="RemoteOnly" />
</system.web>
Run Code Online (Sandbox Code Playgroud)
Global.asax中
protected void Application_EndRequest(Object sender, EventArgs e)
{
ErrorConfig.Handle(Context);
}
Run Code Online (Sandbox Code Playgroud)
ErrorConfig类
public class ErrorConfig
{
public static void Handle(HttpContext context)
{
switch (context.Response.StatusCode)
{
//Not authorized
case 401:
Show(context, 401);
break;
//Not found
case 404:
Show(context, 404);
break;
}
}
static void Show(HttpContext context, Int32 code)
{
context.Response.Clear(); …Run Code Online (Sandbox Code Playgroud) 我在web.config中设置了customErrors
<customErrors mode="On" defaultRedirect="/Error/GeneralError">
<error statusCode="404" redirect="/Error/NotFound"/>
</customErrors>
Run Code Online (Sandbox Code Playgroud)
这在当地工作正常.404会抛出404.在共享主机上,它会抛出标准服务器404页面,除非我专门设置404指向/ Error/NotFound.没关系.现在它将显示自定义404页面,但响应状态代码为200.所以如果我尝试抛出Response.StatusCode = 404; 在我在ErrorController中的NotFound操作中,如下所示:
public class ErrorController : Controller
{
public ActionResult NotFound()
{
Response.StatusCode = 404;
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
服务器抛出状态代码500内部服务器错误,但我的GeneralError页面没有显示,只是一个没有源的空白页面.
我尝试了很多不同的组合,但我似乎无法找到如何让它显示我的自定义404页面以及404响应.
有任何想法吗?
我创建了一个使用集成Windows身份验证的ASP.NET MVC应用程序.实施了以下授权逻辑:
尝试通过NTLM从活动目录获取帐户凭据.
显示Windows身份验证对话框,以便用户可以提供其他凭据:

然后我使用VictorySaber的解决方案为应用程序添加了自定义错误页面:
protected void Application_EndRequest()
{
int status = Response.StatusCode;
string actionName;
if (status >= 400 && status < 500)
{
switch (status)
{
case 401:
actionName = "Unauthorized";
break;
// Handle another client errors
default:
actionName = "BadRequest";
break;
}
}
else if (status >= 500 && status < 600)
{
switch (status)
{
case 501:
actionName = "NotImplemented";
break;
// Handle another server errors
default:
actionName = "InternalServerError"; …Run Code Online (Sandbox Code Playgroud) 我一直在寻找使用ELMaH与ASP.Net MVC的一些方法,以便我可以使用自定义错误页面来处理包括404s在内的所有异常.
有没有短缺的问题 ,询问如何获得/Shared/Error.aspx在ASP.Net MVC正常工作-不论有无ELMAH.我没有遇到过这个任务的问题,但我觉得我在ELMaH旁边使用自定义404页面的解决方案太简单了,我不能动摇它应该有更多的感觉.
在Web.Config中启用customErrors后,我在HomeController中创建了一个新的Action:
public ActionResult PageNotFound()
{
return null;
}
Run Code Online (Sandbox Code Playgroud)
从那里我在我的Global.asax文件中添加了一个新方法,以利用ELMaH的日志过滤功能,并在记录异常后,将响应重定向回上述PageNotFoundActionResult:
public void errorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
if (e.Exception.GetType().Equals(typeof(HttpException)))
{
HttpException ex = (HttpException)e.Exception;
if (ex.GetHttpCode() == 404)
Response.Redirect("/Home/PageNotFound");
}
}
Run Code Online (Sandbox Code Playgroud)
我是否忽略了默认情况下MVC附带的东西(因为我仍然找到了很多关于MVC的方法),或者过度思考存在更简单解决方案的问题?感谢任何输入.
我正在使用[HandleError]MVC3 应用程序中的属性处理错误。这工作正常,但要使其正常工作,我需要添加
<system.web>
<customErrors mode="On" />
Run Code Online (Sandbox Code Playgroud)
为了处理 404 错误,我将其添加到系统中。网络服务器即 IIS 配置而不是 asp.net
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" />
<error statusCode="404" responseMode="ExecuteURL" path="/404page" />
</httpErrors>
Run Code Online (Sandbox Code Playgroud)
这很简单并且非常适合 404。在这里添加它的原因是它似乎是一个很好的包罗万象的,没有任何自定义代码。existingResponse= "Replace"是必需的,其他模式会导致 404 不被处理。
问题是当 existingResponse="Replace" 时 CustomErrors 不再起作用。它只返回一个没有详细信息的剥离 500 错误。
这两种模式只是相互排斥吗?我知道我可以编写其他 404 解决方案,但理想情况下我希望这个简单的配置更改起作用或理解为什么它无法完成。
我正在构建我的第一个ASP.NET MVC网站,我正在试图弄清楚如何实现404页面.
我应该创建一个名为"404Controller?"的控制器吗?如果是这样,我如何在IIS中注册此控制器,以便将404重定向到该页面?此外,在某些其他控制器代码未找到某些内容(例如,在数据库中)的情况下,如何将请求重定向到我的404页面?
在ASP.NET MVC 3中创建自定义错误页面的最佳方法是什么?我特别感兴趣的是404错误,但也有403错误.我是MVC框架的新手,传统上我来自PHP背景,但我正在快速学习.
我在发布此问题之前做了我的研究,并发现了这个链接: asp.net MVC3上的自定义错误页面
这个解决方案看起来很简单虽然当我尝试在我的机器上实现它时,我遇到了以下问题:IController errorsController = new ErrorsController(); 在Application_Error()函数内部.它说"无法找到类型或命名空间名称'ErrorsController'(您是否缺少using指令或程序集引用?").
提前感谢您提供的帮助.
我正在寻找一种方法来拦截/获取在匹配路由之前所做的请求.例如,我有多个控制器和路由设置,但我想要一些机制,在路由方法被命中之前将被击中.如果这种机制能够获得发送的路径参数,那将是非常可取的.
我一直无法找到类似于我正在寻找的东西(但可能不熟悉Web API我用错误的关键字搜索).
我在 Azure 云服务上运行的 MVC 5 Web 应用程序因未处理的异常“从客户端 (:) 检测到潜在危险的 Request.Path 值”而崩溃。
这次崩溃的原因是某些第三方(可能是恶意的)使用 url 访问了我的端点:http : //myExampleHost.com/m : 443/templates
url 中的冒号无法通过路径验证。
某些答案(从客户端 (*) 检测到潜在危险的 Request.Path 值)建议更改验证规则。然而,出于安全考虑,我们可能不想在这方面妥协。
它的理想行为是:我们捕获异常,记录它并返回一些错误消息而不会崩溃。我们应该怎么做?
一个更普遍的问题是:如何在请求命中 MVC 中的控制器之前捕获异常?
asp.net-mvc ×11
c# ×3
asp.net ×2
web-config ×2
azure ×1
elmah ×1
http ×1
iis ×1
routes ×1
url ×1