WWWROOT в MVC5 - PullRequest
       37

WWWROOT в MVC5

5 голосов
/ 03 апреля 2019

Как добиться того же поведения в ASP.NET MVC5 со статическими файлами, как это работает на Aspnet-ядре с app.UseDefaultFiles(); app.UseStaticFiles();?

Я имею в виду, что обслуживание статических файлов из некоторой папки через root, например /wwwroot/some.html mustбыть открытыми в mysite.com/some.html, /wwwroot/img/test.jpg в mysite.com/img/test.jpg и т. д.

Обновление : я создал папку wwwroot и добавил следующее правило в web.config:

<system.webServer>
    <rewrite>
      <rules>
        <rule name="Rewrite Static" stopProcessing="true">
          <match url="^(?!(wwwroot/|api/))(.*)$" ignoreCase="true"></match>
          <action type="Rewrite" url="/wwwroot/{R:1}" />
        </rule>
      </rules>

Таким образом, IIS должен возвращать файлы из wwwroot, за исключением случаев, когда вызовы переходят на /api/something, но я всегда получаю index.html в папке wwwroot и никогда другие файлы.URL Api работает хорошо.
Что я делаю не так?

1 Ответ

1 голос
/ 03 апреля 2019

Все работает так:

<system.webServer>
    <rewrite>
      <rules>
        <rule name="Rewrite Static" stopProcessing="true">
          <match url="^((?!(wwwroot\/|api\/))(.*))$" ignoreCase="true"></match>
          <action type="Rewrite" url="/wwwroot/{R:1}" />
        </rule>
      </rules>
    </rewrite>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <remove name="StaticFile"/>
      <add
                name="StaticFile"
                path="*" verb="*"
                modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule"
                resourceType="Either"
                requireAccess="Read" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
    </handlers>
    <staticContent>
      <mimeMap fileExtension=".*" mimeType="application/octet-stream" />
    </staticContent>
    <modules>
      <remove name="TelemetryCorrelationHttpModule" />
      <add name="TelemetryCorrelationHttpModule" type="Microsoft.AspNet.TelemetryCorrelation.TelemetryCorrelationHttpModule, Microsoft.AspNet.TelemetryCorrelation" preCondition="integratedMode,managedHandler" />
    </modules>
  </system.webServer>

Не забудьте установить модуль перезаписи .

...