可能重复:
如何在ASP.NET MVC中正确处理404?
我已经在Asp.Net MVC(RC 5)中的404 Http错误处理程序中进行了更改,我仍然得到标准的404错误页面.我需要在IIS中更改某些内容吗?
当有人键入不调用ASP.NET MVC中的有效操作或控制器的URL而不显示通用的"未找到资源"ASP.NET错误时,我试图创建自定义HTTP 404错误页面.
我不想使用web.config来处理这个问题.
是否有任何类型的路由魔法可以捕获任何无效的URL?
更新:我尝试了给出的答案,但我仍然得到丑陋的"资源未找到"消息.
另一个更新:好的,显然RC1中发生了一些变化.我甚至尝试过专门捕获404 HttpException,它仍然只是给了我"资源未找到"页面.
我甚至使用过MvcContrib的资源功能,没有 - 同样的问题.有任何想法吗?
asp.net asp.net-mvc custom-error-pages asp.net-mvc-routing http-status-code-404
在尝试为Google网站站长工具设置我的网站后,我发现我的自定义ASP.NET 404页面未返回404状态代码.它显示了正确的自定义页面并告诉浏览器一切正常.这被认为是软404或假404.谷歌不喜欢这个.所以我发现了很多关于这个问题的文章,但我想要的解决方案似乎没有用.
我想要解决的解决方案是将以下两行添加到自定义404页面的Page_Load方法后面的代码中.
Response.Status = "404 Not Found";
Response.StatusCode = 404;
Run Code Online (Sandbox Code Playgroud)
这不起作用.页面仍然返回200 OK.然而,我发现如果我将以下代码硬编码到设计代码中,它将正常工作.
<asp:Content ID="ContentMain" ContentPlaceHolderID="ContentPlaceHolderMaster" runat="server">
<%
Response.Status = "404 Not Found";
Response.StatusCode = 404;
%>
... Much more code ...
</asp:content>
Run Code Online (Sandbox Code Playgroud)
该页面正在使用母版页.我正在我的web.config中配置自定义错误页面.我真的宁愿使用后面的代码选项但我似乎无法在设计/布局中放入黑客内联代码使其工作.
在尝试让我的应用程序正确生成404错误时,我在路由表的末尾实现了catch all route,如下所示:
routes.MapRoute(
"NotFound", _
"{*url}", _
New With {.controller = "Error", .action = "PageNotFound"} _
)
Run Code Online (Sandbox Code Playgroud)
但是,为了使这个工作,我不得不删除默认路由:
{controller}/action/{id}
Run Code Online (Sandbox Code Playgroud)
但是现在已经删除了默认设置,我的大部分操作链接都不再有效,而我找到让它们再次工作的唯一方法是为每个控制器/操作添加单独的路由.
是否有更简单的方法,而不是为每个控制器/操作添加路由?
是否可以创建一个默认路由,如果用户尝试导航到未知路由,仍然允许捕获所有路由?
是否有可能创建一个捕获所有的最终路由...并将用户弹回到ASP.NET MVC中的404视图?
注意:我不想在我的IIS设置中进行此设置.
每次从控制器返回HttpNotFoundResult时,有没有办法返回相同的视图?你如何指定这个视图?我猜测在web.config中配置404页面可能有效,但我想知道是否有更好的方法来处理这个结果.
编辑/跟进:
我最后使用了这个问题的第二个答案中找到的解决方案,并对ASP.Net MVC 3进行了一些微调,以处理我的404:如何正确处理ASP.Net MVC中的404?
是否有内置或正确的方法来处理asp.net mvc 3中的错误?
这就是我想要做的:
我找到了以下方法:
我该如何正确处理?
如果解决方案类似或类似于上面列表中的#1,我使用ninject并且我还没有创建基类.我怎么做呢?
我在我的MVC应用程序中正在处理一些错误处理,我想改成asperrorpath一些不会泄露我正在使用.NET的事情...类似于path
任何人都可以给我一些方向来改变它吗?
如果没有框架抛出异常500错误代码,我怎么能处理404错误?
我在ASP.NET MVC网站中实现了错误处理,就像建议这篇文章一样.
404错误一切正常.但如何正确显示用户友好的屏幕401错误?它们通常不会抛出可在内部处理的异常,Application_Error()而是返回HttpUnauthorizedResult.一种可能的方法是将以下代码添加到Application_EndRequest()方法的末尾
if (Context.Response.StatusCode == 401)
{
throw new HttpException(401, "You are not authorised");
// or UserFriendlyErrorRedirect(new HttpException(401, "You are not authorised")), witout exception
}
Run Code Online (Sandbox Code Playgroud)
但在Application_EndRequest()Context.Session == null中,errorController.Execute()失败是因为它无法使用默认的TempDataProvider.
// Call target Controller and pass the routeData.
IController errorController = new ErrorController();
errorController.Execute(new RequestContext(
new HttpContextWrapper(Context), routeData)); // Additional information: The SessionStateTempDataProvider requires SessionState to be enabled.
Run Code Online (Sandbox Code Playgroud)
那么,您能否建议一些最佳实践如何在ASP.NET MVC应用程序中使用"用户友好句柄"401?
谢谢.