关于iis 7.5 发布网页后404等相关问题整理合集

博客介绍了在IIS 7.5中遇到404错误时的排查步骤,包括检查IIS配置、.NET Framework、ISAPI限制、应用池设置、权限、MIME类型和Web.config配置。作者分享了直接修改Web.config的解决方法,但也指出这种方法可能带来的性能问题,并提供了其他替代方案,涉及UrlRoutingModule和OWIN认证设置。

昨天发布网站出了点问题 404 资源已被删除、已更名或暂时不可用。

这很奇怪,这个站点我部署了好几个,该服务器已经是第二次部署,因为客户服务器中病毒了,全部重新安装

我在别的客户上部署全部没有问题,就这一个出现了该问题,真的很郁闷

问题梳理:

1.iis安装是否出现问题,少了配置

2..NET FW是否安装3.0/4.0

3.ISAPI 和CGI限制是否允许

 4.应用池程序是否修改成4.0/高级设置32位也可以开启

 5.权限问题,发出的文件是否能被有效访问,有读写相关需求的用户组是够有足够的权限

6.访问文件出错,MIME类型里是否添加相应后缀名的扩展,没有添加即可

7.我遇到的问题

错误摘要
HTTP 错误 404.0 - Not Found
您要找的资源已被删除、已更名或暂时不可用。
详细错误信息
模块    IIS Web Core
通知    MapRequestHandler
处理程序    StaticFile
错误代码    0x80070002
请求的 URL    http://xxx.xxx.x.xxx:8082/home/index
物理路径    D:\wenjian\home\index
登录方法    匿名
登录用户    匿名
最可能的原因:
指定的目录或文件在 Web 服务器上不存在。
URL 拼写错误。
某个自定义筛选器或模块(如 URLScan)限制了对该文件的访问 

所有配置均已完成,这个问题的原因是在 IIS 7.0 中,对于使用 Url 路由 访问页面的 ASP.NET 应用程序,IIS可能会不能出 Url 是对 ASP.NET 的请求。会显示404/403之类的错误代码(路径不存在,或者不允许查看目录)

我用的方法比较粗暴:直接修改WEB.CONFING文件

<system.webServer>

        <!--增加runAllManagedModulesForAllRequests="true"  即可--!>

        <modules runAllManagedModulesForAllRequests="true" ></modules>

</system.webServer>

但是这么做是有点问题的

【别人写的 我直接贴过来了 不想自己写】

因为性能会浪费, 还有一些静态文件的请求可能会被要求验证 (比如图片是可以含有 & 符号的, 但是你设置了这个, 就会被验证成 invalid 了),这样会让所有的请求都要经由 .NET 来处理,不管是什么路径文件,这样确实能解决当前的问题。一方面会让 .NET 比较累,所有静态文件请求也需要处理。另一方面,也可能会让程序的内容变得更复杂,比如如果有代码会根据请求的 Url 来处理一些事情。 

网上还有别的替代方法

【直接贴的网友的】

找到了一个看起来比较好的解决方案。如上图所示,Url 路由是由 UrlRoutingModule 这个模块来处理的。在某些 IIS 版本中,并不会将所有请求交给 UrlRoutingModule 处理,所以,我们可以在 Web.config 中进行如下设置:

首先移除掉原有的 UrlRoutingModule,然后再添加一下,不过这次添加将把 preCondition 设为空.

<system.webServer>
    <modules>
      <remove name="UrlRoutingModule-4.0" />
      <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
    </modules>
</system.webServer>

 当然上述方法有一个小问题

在Asp.Net WebApi 项目中使用OWIN模块之后,如果没有在OWIN的Startup类中配置认证方式,调用WebApi的相关Controller和Action就会出现异常:

没有 OWIN 身份验证管理器与此请求相关联。
ExceptionType:System.InvalidOperationException
StackTrace:   在 System.Web.Http.Owin.PassiveAuthenticationMessageHandler.SuppressDefaultAuthenticationChallenges(HttpRequestMessage request)
在 System.Web.Http.Owin.PassiveAuthenticationMessageHandler.<SendAsync>d__0.MoveNext()
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
在 System.Web.Http.HttpServer.<SendAsync>d__0.MoveNext()

解决方法有两个:

第一:在OWIN的Startup类中指定默认的认证方式,我们将上面的Startup类代码改为下面的代码,在Configuration方法中为指定认证方式为Cookie认证。

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Owin;
using Microsoft.Owin.Security;
using Microsoft.Owin.Security.Cookies;
using Owin;

[assembly: OwinStartup(typeof(Daimler.CdnMgmt.Web.Startup))]

namespace Daimler.CdnMgmt.Web
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
            app.UseCookieAuthentication(new CookieAuthenticationOptions());
        }
    }
}

第二:在Asp.Net WebApi的全局配置文件WebApiConfig.cs中取消调用SuppressDefaultHostAuthentication方法,来启用Host的默认身份认证,如下代码所示。当然如果项目中本来就没有代码调用SuppressDefaultHostAuthentication方法,就不用考虑这个解决方法了。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Cors;
using Daimler.CdnMgmt.Web.Utils;
using Microsoft.Owin.Security.OAuth;
using Newtonsoft.Json.Serialization;

namespace Daimler.CdnMgmt.Web
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            //config.SuppressDefaultHostAuthentication();//取消调用SuppressDefaultHostAuthentication方法,恢复Host的默认身份认证


            // Web API 路由
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new {id = RouteParameter.Optional}
            );
        }
    }
}

 当然如果你的ASP.NET项目中没有安装或者丢失了NuGet包:Microsoft.Owin.Host.SystemWeb,但是又使用了OWIN框架,也会出现本文所述的错误,只要重新安装NuGet包:Microsoft.Owin.Host.SystemWeb即可。

暂时我用的是不替换方式直接,看个人选择

<modules runAllManagedModulesForAllRequests="true" ></modules>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值