相关疑难解决方法(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错误处理

可能重复:
如何在ASP.NET MVC中正确处理404?

我已经在Asp.Net MVC(RC 5)中的404 Http错误处理程序中进行了更改,我仍然得到标准的404错误页面.我需要在IIS中更改某些内容吗?

error-handling asp.net-mvc

129
推荐指数
3
解决办法
14万
查看次数

如何在asp.net mvc中处理'查找未找到'InvalidOperationException?

我有一个asp.net mvc 1.0站点,它提供来自2级层次结构/类别/文章的一些内容

当事情正常工作时,文章会映射到视图并呈现视图.但是,当url符合路由条件但视图不存在时,会引发异常,我无法陷入Controller操作.

路由:

routes.MapRoute(
  "Article",
  "{category}/{article}.aspx",
  new { controller = "MyController", action = "Article" }
);
Run Code Online (Sandbox Code Playgroud)

MyController动作:

public ActionResult Article(string category, string article)
{
    string path = string.Format("~/Views/{0}/{1}.aspx", category, article);
    ViewResult vr = View(path);
    return vr;
}
Run Code Online (Sandbox Code Playgroud)

但是,当找不到视图时,System.InvalidOperationException会生成一个我无法在Controller Action中捕获的a.

异常详细信息:System.InvalidOperationException:找不到视图'〜/ Views/my-category/my-article-with-long-name.aspx'或其主文件.搜索了以下位置:〜/ Views/my-category/my-article-with-long-name.aspx

我可以在Application_Error()方法中捕获错误global.asax.cs但是:

  1. 不知道如何从那里重定向到错误视图
  2. 想知道是否有一个更接近异常的地方.

c# asp.net-mvc

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

在IIS6上将所有请求重定向到ASP.NET MVC

我可能忽略了一些非常简单的东西,但我试图将所有错误的URL重定向到根据条件过滤URL的操作,然后301重定向到合适的页面或发出404页面.

为此,我在路由表的末尾有这样的路由:

routes.MapRoute("Error", "{*url}", new { controller = "Main", action = "Error" }); 
Run Code Online (Sandbox Code Playgroud)

这样的动作:

public ActionResult Error(string url)
{
        if (/* Conditions are met... */)
        {
            Response.Status = "301 Moved Permanently";
            Response.AddHeader("Location", /* Destination URL */);
            Response.End();
        }

        Response.StatusCode = 404;
        return View(/* 404 page... */));
}
Run Code Online (Sandbox Code Playgroud)

这在当地非常有效.

但是,当部署到IIS6时,不包含.mvc(例如oldfile.php)的URL永远不会发送到ASP.NET进程进行路由.

有一个简单的解决方案/我忽略了什么吗?

编辑:这与此问题有关,但在IIS6下,没有.mvc的URL不会被发送用于ASP.NET MVC处理.

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

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