ASP.NET MVC web.config中的404配置


先看以下三个url:

http://localhost:54379/123aaa

http://localhost:54379/123+aaa

http://localhost:54379/123.aaa

虽然都是报404错误,但他们的原因却不一样,所以解决方法也不同。



1. http://localhost:54379/123.aaa



这是因为控制器中找不到方法,解决方法是在web.config中的<system.web>节点下配置:

    <customErrors defaultRedirect="~/Web/Home/Error_404" mode="On" redirectMode="ResponseRedirect">
      <error redirect="/Web/Home/Error_404" statusCode="404" />
    </customErrors>



2. http://localhost:54379/123+aaa



这是因为包含了特殊字符,“请求筛选模块被配置为拒绝包含双重转义序列的请求”,解决方法是在web.config中的<system.webServer>节点下配置:

    <security>
      <requestFiltering allowDoubleEscaping="true"></requestFiltering>
    </security>



3. http://localhost:54379/123.aaa


这是因为IIS找不到可以处理此类文件的应用程序。我们可以通过IIS的应用程序配置将 .aaa 这样的请求交给aspnet_isapi.dll去处理,这样可以解决问题,但我们不保证用户会输入其他如 .bbb、.ccc 这样的请求,所以这里有一个解决方法:

    <modules runAllManagedModulesForAllRequests="true">
    </modules>
这个方法会将所有请求都交由aspnet_isapi.dll去处理,当然包括 .html、.js、.css 等静态文件了,所以.....  用不用就自己去考虑好了。


-------------------------------------  淫荡的分割线  -------------------------------------

其实如果只是想自定义404页面,同时又要返回正确的404状态码,可以这样:

step1: 修改web.config

<httpErrors errorMode="Custom" existingResponse="Replace">
      <remove statusCode="404" subStatusCode="-1" />
      <error statusCode="404" prefixLanguageFilePath="" path="/Home/NotFound" responseMode="ExecuteURL" />
    </httpErrors>

step2:新增对应控制器方法

        public ActionResult NotFound()
        {
            Response.Status = "404 Not Found";
            Response.StatusCode = 404;
            return View();
        }
这样就可以了~


展开阅读全文
©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值