相关疑难解决方法(0)

如何在ASP.NET MVC中正确处理404?

我正在使用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 http-status-code-404

426
推荐指数
9
解决办法
13万
查看次数

如何捕获所有路由来处理ASP.NET MVC的'404 page not found'查询?

是否有可能创建一个捕获所有的最终路由...并将用户弹回到ASP.NET MVC中的404视图?

注意:我不想在我的IIS设置中进行此设置.

asp.net-mvc routes http-status-code-404

49
推荐指数
3
解决办法
9万
查看次数

web.config中的<customErrors>在哪里用于MVC应用程序?

我正在尝试在我的MVC 4应用程序中实现自定义错误处理.我不确定我的web.config <customErrors>中应该去哪里,以及我需要包含在其中的一般信息.

asp.net-mvc web-config asp.net-mvc-4

21
推荐指数
1
解决办法
2万
查看次数

Asp.Net MVC中的404 Http错误处理程序(RC 5)

如果没有框架抛出异常500错误代码,我怎么能处理404错误?

asp.net-mvc http http-status-code-404

20
推荐指数
2
解决办法
2万
查看次数

ASP.NET MVC 5 - (HTTP错误404.0 - 未找到)具有长的不存在的URL

我在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错误404.0  - 未找到

代码来自: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)

url asp.net-mvc asp.net-routing http-status-code-404

9
推荐指数
2
解决办法
3万
查看次数

ASP.NET MVC自定义错误页面(StatusCode 404抛出500)

我在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响应.

有任何想法吗?

asp.net-mvc http-status-code-404

8
推荐指数
1
解决办法
7973
查看次数

ASP.NET MVC应用程序的自定义401错误页面

我创建了一个使用集成Windows身份验证的ASP.NET MVC应用程序.实施了以下授权逻辑:

  1. 尝试通过NTLM从活动目录获取帐户凭据.

    • 如果收到凭据且Windows帐户具有所需权限,则执行请求的操作.
    • 否则请转至第2条.
  2. 显示Windows身份验证对话框,以便用户可以提供其他凭据: 身份验证对话框

    • 如果收到其他凭据且用户具有所需权限,则执行请求的操作.
    • 如果未收到其他凭据或帐户权限少于其要求,则重复第2条.
    • 如果取消验证对话框,则显示401错误消息.

然后我使用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)

c# windows-authentication custom-error-pages asp.net-mvc-5

8
推荐指数
1
解决办法
1451
查看次数

这种使用ELMaH和MVC气味的方法吗?

我一直在寻找使用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的方法),或者过度思考存在更简单解决方案的问题?感谢任何输入.

asp.net-mvc elmah exception-handling http-status-code-404

7
推荐指数
1
解决办法
660
查看次数

HttpErrors existingResponse="Replace" 阻止了 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 web-config http-status-code-404 asp.net-mvc-3

6
推荐指数
1
解决办法
9132
查看次数

ASP.NET MVC中的404页面

我正在构建我的第一个ASP.NET MVC网站,我正在试图弄清楚如何实现404页面.

我应该创建一个名为"404Controller?"的控制器吗?如果是这样,我如何在IIS中注册此控制器,以便将404重定向到该页面?此外,在某些其他控制器代码未找到某些内容(例如,在数据库中)的情况下,如何将请求重定向到我的404页面?

asp.net iis asp.net-mvc http-status-code-404

5
推荐指数
2
解决办法
5197
查看次数

如何在ASP.NET MVC 3中创建自定义404错误页面?

在ASP.NET MVC 3中创建自定义错误页面的最佳方法是什么?我特别感兴趣的是404错误,但也有403错误.我是MVC框架的新手,传统上我来自PHP背景,但我正在快速学习.

我在发布此问题之前做了我的研究,并发现了这个链接: asp.net MVC3上的自定义错误页面

这个解决方案看起来很简单虽然当我尝试在我的机器上实现它时,我遇到了以下问题:IController errorsController = new ErrorsController(); 在Application_Error()函数内部.它说"无法找到类型或命名空间名称'ErrorsController'(您是否缺少using指令或程序集引用?").

提前感谢您提供的帮助.

error-handling asp.net-mvc http-status-code-404

5
推荐指数
1
解决办法
9431
查看次数

在路由匹配发生之前拦截所有WebApi调用

我正在寻找一种方法来拦截/获取在匹配路由之前所做的请求.例如,我有多个控制器和路由设置,但我想要一些机制,在路由方法被命中之前将被击中.如果这种机制能够获得发送的路径参数,那将是非常可取的.

我一直无法找到类似于我正在寻找的东西(但可能不熟悉Web API我用错误的关键字搜索).

c# asp.net-web-api

5
推荐指数
2
解决办法
1万
查看次数

如何捕获“从客户端 (:) 检测到潜在危险的 Request.Path 值”以避免 Web 角色崩溃?

我在 Azure 云服务上运行的 MVC 5 Web 应用程序因未处理的异常“从客户端 (:) 检测到潜在危险的 Request.Path 值”而崩溃。

这次崩溃的原因是某些第三方(可能是恶意的)使用 url 访问了我的端点:http : //myExampleHost.com/m : 443/templates

url 中的冒号无法通过路径验证。

某些答案(从客户端 (*) 检测到潜在危险的 Request.Path 值)建议更改验证规则。然而,出于安全考虑,我们可能不想在这方面妥协。

它的理想行为是:我们捕获异常,记录它并返回一些错误消息而不会崩溃。我们应该怎么做?

一个更普遍的问题是:如何在请求命中 MVC 中的控制器之前捕获异常?

c# asp.net asp.net-mvc azure azure-cloud-services

5
推荐指数
1
解决办法
2046
查看次数