图像无法在 asp.net mvc 4 中加载

问题描述 投票:0回答:1

我从未在 Plesk 上上传 ASP.NET MVC 4,而是使用 ASP.NET Core 5 MVC。

由于老板的命令,我必须使用 ASP.NET MVC 4 开发一个项目。我对 localhost 没有任何问题,并且可以在 localhost 上运行该项目,没有任何错误,但是当我通过 Plesk 将项目上传到远程主机上时,没有显示任何图像文件,无论是 JPEG 还是 PNG,并且它们都给了我404 错误。

我使用捆绑包通过修改

BundleConfig
来解析地址CSS和JS文件,如下所示:

public class BundleConfig
{
    // For more information on bundling, visit https://go.microsoft.com/fwlink/?LinkId=301862
    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                    "~/Scripts/jquery-{version}.js"));

        bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                    "~/Scripts/jquery.validate*"));

        // Use the development version of Modernizr to develop with and learn from. Then, when you're
        // ready for production, use the build tool at https://modernizr.com to pick only the tests you need.
        bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
                    "~/Scripts/modernizr-*"));

        bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
                  "~/Scripts/bootstrap.min.js"));

        bundles.Add(new StyleBundle("~/Content/css").Include(
                  "~/Content/bootstrap.min.css",
                  "~/Content/site.min.css",
                  "~/Content/userCustom.min.css",
                  "~/UsePanel.min.css"));

        bundles.Add(new StyleBundle("~/bundles/HomeStyle").Include(
            "~/Content/bootstrap.min.css",
            "~/assets/css/animate.min.css",
            "~/assets/css/fontawesome-all.min.css",
            "~/assets/css/slick.css",
            "~/assets/css/default.css",
            "~/assets/css/style.css",
            "~/assets/css/responsive.css"));

        bundles.Add(new Bundle("~/bundles/HomeJs").Include(
            "~/Scripts/bootstrap.min.js",
            "~/assets/js/jquery.countdown.min.js",
            "~/assets/js/jquery.appear.js",
            "~/assets/js/slick.min.js",
            "~/assets/js/ajax-form.js",
            "~/assets/js/jquery.easing.js",
            "~/assets/js/chart.min.js",
            "~/assets/js/custom-chart.js",
            "~/assets/js/wow.min.js",
            "~/assets/js/main.js"
        ));

    }
}

并使用此 Razor 语法来绑定 index.cshtml 所需的样式和 javascript:

@Styles.Render("~/bundles/HomeStyle")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/HomeJs")

到这里,一切都按预期顺利进行,但是我在

index page
中有几个图像文件,例如:

    <div class="footer-shape-wrap">
                <img src="~/assets/img/images/footer_shape01.png" alt="" class="alltuchtopdown">
                <img src="~/assets/img/images/footer_shape02.png" alt="" class="leftToRight">
</div>


<div class="footer-area footer-bg" style="background-image: url('@Url.Content("~/assets/img/bg/footer_bg.png")');"></div>

正如我之前提到的,当我在 localhost 上运行项目时,所有 CSS、JS 和图像文件都已加载,没有问题。

但是远程主机(Plesk)的情况有所不同。远程服务器上没有加载任何图像文件,或者更确切地说,它们都给出 404 错误,并且服务器似乎无法识别我的文件的路径。

这是我的根本解决方案:

我已经搜索了所有这些文章,但在其中任何一篇中都找不到解决此问题的方法。如果您能帮我解决这个问题,我将不胜感激。

  1. https://www.codeproject.com/Tips/1081630/How-to-Access-Static-Content-Files-in-MVC-Applicat
  2. 使用 ASP.NET 路由提供静态文件
  3. https://blog.aelterman.com/2011/01/31/using-asp-net-4-0-extension-less-routing-on-iis-7-5/
  4. 如何从 ASP.NET-MVC 4 应用程序提供静态文件?
  5. 在 ASP.NET 4.5 项目中使用 wwwroot 文件夹(ASP.NET Core 样式)

另外,我在web config中所做的这方面的设置也是这样的

    <?xml version="1.0"?>
<configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>
  <appSettings>
    <add key="webpages:Enabled" value="false" />
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.webServer>
  <modules runAllManagedModulesForAllRequests="true"/>
    <defaultDocument>
      <files>
        <clear />
        <add value="Home/Index" />
      </files>
    </defaultDocument>
    <staticContent>
            <clientCache cacheControlMaxAge="7.00:00:00" cacheControlMode="UseMaxAge" />
            <mimeMap fileExtension=".lottie" mimeType="application/json" />
            <mimeMap fileExtension=".png" mimeType="image/png" />
        </staticContent>
        <rewrite>
           <rules>
               <rule name="HTTP to HTTPS redirect" stopProcessing="true">
                   <match url="(.*)" />
                   <conditions>
                       <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                   </conditions>
                   <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
               </rule>
               <rule name="wwwRootFix" stopProcessing="true">
                  <match url="(.*)" />
                  <conditions logicalGrouping="MatchAll">
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    <add input="{APPL_PHYSICAL_PATH}wwwroot\{R:1}" matchType="IsFile" />
                    <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
                    <add input="{REQUEST_URI}" pattern="^/(assets)" negate="true" />
                  </conditions>
                  <action type="Redirect" url="/assets/{R:1}" />
                </rule>
           </rules>
           <outboundRules>
               <rule name="Add Strict-Transport-Security when HTTPS" enabled="true">
                   <match serverVariable="RESPONSE_Strict_Transport_Security" pattern=".*" />
                   <conditions>
                       <add input="{HTTPS}" pattern="on" ignoreCase="true" />
                   </conditions>
                   <action type="Rewrite" value="max-age=31536000" />
               </rule>
           </outboundRules>
       </rewrite>
    <handlers>
      <remove name="BlockViewHandler" />
      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
  <system.web>
  
    <customErrors mode="Off" />
    <compilation tempDirectory="D:\Inetpub\vhosts\wintron.net\tmp">
      <assemblies>
        <add assembly="System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </assemblies>
    </compilation>
  </system.web>
</configuration>
c# html asp.net-mvc-4 razor plesk
1个回答
0
投票

看来我的

web.config
有一些问题: 我刚刚删除了一些标签,并意识到某些设置与主机服务器冲突。

    <?xml version="1.0"?>
<configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" />
        <bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
        <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Z.EntityFramework.Extensions" publicKeyToken="59b66d028979105b" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.67.0" newVersion="4.0.67.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="AngleSharp" publicKeyToken="e83494dcdc6d31ea" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-0.17.1.0" newVersion="0.17.1.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <system.web>
    <customErrors mode="Off" />
    <compilation tempDirectory="D:\Inetpub\vhosts\wintron.net\tmp">
    </compilation>
  </system.web>
</configuration>

如您所见,我删除了这些部分:

<appSettings>
    <add key="webpages:Enabled" value="false" />
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>

<staticContent>
                <clientCache cacheControlMaxAge="7.00:00:00" cacheControlMode="UseMaxAge" />
                <mimeMap fileExtension=".lottie" mimeType="application/json" />
                <mimeMap fileExtension=".png" mimeType="image/png" />
</staticContent>

<rule name="wwwRootFix" stopProcessing="true">
              <match url="(.*)" />
              <conditions logicalGrouping="MatchAll">
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                <add input="{APPL_PHYSICAL_PATH}wwwroot\{R:1}" matchType="IsFile" />
                <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
                <add input="{REQUEST_URI}" pattern="^/(assets)" negate="true" />
              </conditions>
              <action type="Redirect" url="/assets/{R:1}" />
            </rule>

此后,所有图像文件都会在 Plesk 服务器上加载。

© www.soinside.com 2019 - 2024. All rights reserved.