C# IIS显示404,但文件存在

C# IIS显示404,但文件存在,c#,iis,model-view-controller,http-status-code-404,C#,Iis,Model View Controller,Http Status Code 404,我的应用程序在VPS上运行后出现问题 我在VPS上安装了IIS,删除了DefaultWebsite,并添加了另一个。一切看起来都很好,网站启动了,但我无法访问内容、脚本、模板等文件夹中的任何文件。这意味着我的网站上没有任何图片和样式 我尝试为IIS\u IUSR授予权限,但文件仍然无法正确显示。网站和系统在同一个分区上,我想这就是问题所在,但我无法移动它。我只有一个分区:-(有解决方案吗?请在IIS.Site->Basic Settings->Connect as…(如果我没记错的话)中检查用户

我的应用程序在VPS上运行后出现问题

我在VPS上安装了IIS,删除了DefaultWebsite,并添加了另一个。一切看起来都很好,网站启动了,但我无法访问内容、脚本、模板等文件夹中的任何文件。这意味着我的网站上没有任何图片和样式


我尝试为IIS\u IUSR授予权限,但文件仍然无法正确显示。网站和系统在同一个分区上,我想这就是问题所在,但我无法移动它。我只有一个分区:-(有解决方案吗?

请在IIS.Site->Basic Settings->Connect as…(如果我没记错的话)中检查用户

默认情况下,IIS中的用户是IUSR。您必须更改为IIS\U IUSRS。然后您的权限将生效


您需要添加一个
web.config
文件,以便为每个包含以下内容的静态文件的文件夹中的静态文件提供服务:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <staticContent>
            <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" />
        </staticContent>
        <handlers accessPolicy="Script,Read">
            <!-- For any request to a file exists on disk, return it via native http module. AccessPolicy="Script" above is to allow for a managed 404 page. -->
            <add name="StaticFile" path="*" verb="*" modules="StaticFileModule" preCondition="integratedMode" resourceType="File" requireAccess="Read" />
        </handlers>
    </system.webServer>
</configuration>

我还添加了此代码以使应用程序运行。没有它,应用程序将无法工作,但文件会正确显示:-(


在我的例子中,我有一个扩展名为
缓存的文件
——IIS中的一种未知mime类型

通过更新网站web.config以添加文件扩展名为
缓存的mimeMap,解决了我的404文件未找到问题,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <directoryBrowse enabled="true" />
        <security>
            <requestFiltering>
                <fileExtensions>
                    <remove fileExtension=".config" />
                    <add fileExtension=".config" allowed="true" />
                    <add fileExtension=".dll" allowed="true" />
                    <add fileExtension=".exe" allowed="true" />
                </fileExtensions>
            </requestFiltering>
        </security>
        <handlers accessPolicy="Read, Script" />
        <staticContent>
            <mimeMap fileExtension=".cache" mimeType="text/plain" />
        </staticContent>
    </system.webServer>
</configuration>


而且

以上这些对我都不起作用。起作用的是(我从很久以前就记得)缺少MIME类型映射会混淆IIS。如果可以将不同类型的文件放在不同的文件夹中,这很容易诊断为问题


Easy fix是IIS下的“MIME类型”部分,位于服务器、网站或虚拟文件夹上。只需添加“*.foo”和“application/octet stream”作为MIME类型,其中说明“只需发送字节就可以了!”

可能不是常见问题,但我意外地创建了一个虚拟目录,其中包含指向默认页面的路径,这将事情搞砸了。我必须打开applicationhost.config文件,然后删除虚拟目录(好吧,也许可以用另一种方式删除它,但我直到打开文件才发现它,因为我已经打开了它,所以我继续并保存了更改)。

我也有同样的问题。我正在重新启动PCC,检查事件日志以查看是否有任何权限问题被记录。不幸的是,仍然是一样的:-(您是否已将其添加到所有静态内容文件夹?之后,您需要重置IIS。是的,所有静态内容文件夹。您是否已在“通用HTTP功能”下启用“静态内容”在安装IIS时的IIS设置中?validateIntegratedModeConfiguration似乎隐藏了该问题,请参阅validateIntegratedModeConfiguration文档:>因为当validateIntegratedModeConfiguration为false时,IIS将不再为不支持的配置提供警告,请确保应用程序能够正常工作在进行此设置之前,请正确选择集成模式。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <directoryBrowse enabled="true" />
        <security>
            <requestFiltering>
                <fileExtensions>
                    <remove fileExtension=".config" />
                    <add fileExtension=".config" allowed="true" />
                    <add fileExtension=".dll" allowed="true" />
                    <add fileExtension=".exe" allowed="true" />
                </fileExtensions>
            </requestFiltering>
        </security>
        <handlers accessPolicy="Read, Script" />
        <staticContent>
            <mimeMap fileExtension=".cache" mimeType="text/plain" />
        </staticContent>
    </system.webServer>
</configuration>