c# – 在IIS 6上运行的ASP.NET MVC 3应用程序上处理404

c# – 在IIS 6上运行的ASP.NET MVC 3应用程序上处理404,第1张

概述标题说明了一切.实际上有很多关于如何做到这一点的信息,我非常接近.我在谷歌以及以下stackoverflow帖子上阅读了几个内容: How can I properly handle 404 in ASP.NET MVC? How can I properly handle 404 in ASP.NET MVC? Custom error pages on asp.net MVC3 http:// 标题说明了一切.实际上有很多关于如何做到这一点的信息,我非常接近.我在谷歌以及以下stackoverflow帖子上阅读了几个内容:

How can I properly handle 404 in ASP.NET MVC?

How can I properly handle 404 in ASP.NET MVC?

Custom error pages on asp.net MVC3

http://blog.davebouwman.com/2011/04/21/custom-404-pages-for-asp-net-mvc-3/

我有404在行动层面工作.我在控制器上使用* .aspx后缀.如果你有一个网址喜欢

"http://blahblah/Appname/IDontexist.aspx"

自定义错误控制器已加载.我的问题归结为没有.aspx但也不存在的控制器.这会产生典型的IIS Server 404 HTML页面,这是我不想要的.另一个问题是,我无法真正改变IIS配置本身.我必须通过代码/ web.config / global.asax(或我没有想到的项目的其他部分)来处理这个问题.

这是我的web.config条目(这是根web.config,而不是视图):

<httpErrors defaultPath="/Error.aspx/httpError" errorMode="Custom" existingResponse="Replace" defaultResponseMode="ExecuteURL">  <remove statusCode="500" subStatusCode="-1" />  <remove statusCode="404" subStatusCode="-1" />  <error statusCode="500" path="/Error.aspx/httpError" responseMode="ExecuteURL" />  <error statusCode="404" path="/Error.aspx/NotFound" responseMode="ExecuteURL" /></httpErrors><customErrors mode="On"  defaultRedirect="~/Error.aspx/httpError">  <error redirect="~/Error.aspx/NotFound" statusCode="404" /></customErrors>

这是我在global.asax中的路由:

routes.MapRoute(            "Default",// Route name            "{controller}.aspx/{action}/{ID}",// URL with parameters            new { controller = "StartController",action = "StartAction",ID = UrlParameter.Optional } // Parameter defaults        );        routes.MapRoute(            "NotFoundController",// Route name            "{controller}.aspx",// URL with parameters            new { controller = "Error",action = "NotFound" } // Parameter defaults        );        routes.MapRoute(            "NotFoundController2",// Route name            "{controller}",action = "NotFound" } // Parameter defaults        );        routes.MapRoute(            "Root",// Route name            "",ID = UrlParameter.Optional } // Parameter defaults        );

我还认为使用路由捕获这些的一个障碍是我丢失了404状态代码;但是,因为该路线指向专门为此目的而设计的行动,我认为这一点没有实际意义.

无论如何,任何想法,建议或批评都会受到欢迎.我在这附近很近.谢谢!

编辑1

我一直在研究这个问题.有没有办法我可以定义一个自定义路由约束,如果在网址中找不到文本“.aspx”,它将重定向到错误控制器?

编辑2

看起来不像是如何使用约束.我也尝试过实施

protected voID Application_Error()    {    }

根据http://blog.davebouwman.com/2011/04/21/custom-404-pages-for-asp-net-mvc-3/的实现方法,但是当我没有为控制器指定.aspx时,看起来应用程序似乎永远不会有机会抛出错误.在我的应用程序甚至可以响应它之前,它看起来像是由IIS处理的.

如果我可以进行IIS更改,最好是只对这个应用程序的虚拟目录条目进行更改,是否可以为此提供更可行的解决方案?

如果有一个地方我可以抓住网址,搜索.aspx,如果找不到,则抛出404找不到,但重定向到应用程序级别404页面而不是IIS默认值,这将非常接近理想状态.

思考?

编辑3

我认为除非您的应用程序是IIS服务器的根站点而不是虚拟目录,否则无法处理此方案.我注意到,在IIS 6.0中,您可以调整默认的IIS错误页面.不仅如此,您还可以使用URL替换某些案例.我尝试使用虚拟目录站点执行此 *** 作,但显示默认的IIS 404未找到页面.

所以它相当于:你可以在IIS 6上处理这个问题,如果你对你的设置有一个愚蠢的控制权,你正在做的这个站点就是根网站.

在我想象的现实场景中不太适用.

解决方法 如果不能对IIS进行更改,我认为这是不可能的.使用IIS 6,请求不会进入ASP.Net领域,除非它们映射到ASP.Net ISAPI处理程序(aspnet_isAPI.dll).对于普通的ASP.Net扩展,当安装.Net(.ashx,.aspx等)时,已经在IIS6中设置了映射.这就是为什么你的404不存在的控制器获得正常的IIS 404页面. IIS正在查找磁盘上不存在的文件夹.

为了让您的404页面处理程序按预期工作(假设您可以对IIS进行更改),您需要设置所谓的wilcard映射.这会将所有请求发送到ASP.Net ISAPI.还需要指示IIS绕过对物理文件的检查,因为在这种情况下不存在.该选项有一个复选框.我不再拥有IIS 6,但本网站上的选项1将引导您完成它:

http://blog.stevensanderson.com/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/

我之前做过这个,它确实有效.将所有内容发送到.Net ISAPI有一些权衡.所有静态文件都将由ASP.Net(甚至是图像)而不是IIS直接处理,因此请注意其中的含义.

希望这可以帮助

总结

以上是内存溢出为你收集整理的c# – 在IIS 6上运行的ASP.NET MVC 3应用程序上处理404全部内容,希望文章能够帮你解决c# – 在IIS 6上运行的ASP.NET MVC 3应用程序上处理404所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1229704.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存