يعمل Microsoft.Owin.StaticFiles في مضيف وحدة التحكم ولكني أحصل على 404 في IIS عند طلبات الملفات

StackOverflow https://stackoverflow.com//questions/25071894

  •  26-12-2019
  •  | 
  •  

سؤال

لقد قمت بإعداد Microsoft.Owin.FileServer (v2.1.0) في مسار Owin الخاص بي، وإعداد FileServerOptions باستخدام EnableDirectoryBrowsing = true يعمل بشكل رائع لعرض محتويات الدليل في كل من مضيف وحدة التحكم وiisexpress.

عندما أحاول عرض ملف معين (لذلك، الجزء StaticFiles) أواجه مشكلات في iisexpress.لا يزال يعمل بشكل رائع في مضيف وحدة التحكم، ولكن في iisexpress أحصل على 404:

HTTP Error 404.0 - Not Found
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

Most likely causes:
- The directory or file specified does not exist on the Web server.
- The URL contains a typographical error.
- A custom filter or module, such as URLScan, restricts access to the file.

لدي أحدث إصدار من Microsoft.Owin.Host.SystemWeb المشار إليه في مضيف الويب.

هل كانت مفيدة؟

المحلول

إضافة <modules runAllManagedModulesForAllRequests="true"> لم يعمل معي (VS2013، IIS Express).

أدى فرض جميع الطلبات لاستخدام خط أنابيب Owin إلى ما يلي:

(في web.config)

<configuration>
  <system.webServer>
    <handlers>
      <add name="Owin" verb="" path="*" type="Microsoft.Owin.Host.SystemWeb.OwinHttpHandler, Microsoft.Owin.Host.SystemWeb"/>
    </handlers>
  </system.webServer>
</configuration>

نصائح أخرى

اضطررت إلى إضافة الإعداد التالي:

giveacodicetagpre.

للحصول على الوحدة النمطية التي يسجلها Microsoft.owin.host.systemWeb تلقائيا لتشغيلها للطرق مثل * .txt، * .js التي كانت IIS تفترض أنها ملفات ثابتة للتشغيل عبر خط أنابيب Owin.

يحتوي هذا الإعداد على آثار للأداء على الملفات الثابتة الفعلية، ولكن هذا يعمل بالنسبة لي.

لقد واجهت هذا الأمر خلال الساعتين الماضيتين، مضيفًا أن المعالج أدناه يعمل ولكن لا أعتقد أن هذا هو النهج الصحيح، فقد تسبب في ذلك public void Configuration(IAppBuilder appBuilder) ليتم استدعاؤه مرتين.

<add name="Owin" verb="" path="*" type="Microsoft.Owin.Host.SystemWeb.OwinHttpHandler, Microsoft.Owin.Host.SystemWeb"/>

لقد قمت ببعض القراءة ووجدت https://docs.microsoft.com/en-us/aspnet/aspnet/overview/owin-and-katana/owin-middleware-in-the-iis-integrated-pipelineمما يقودني بعد ذلك إلى الاستخدام UseStageMarked().

إذن الآن دعوتي إلى UseStaticFiles() ويتبعه استدعاء ل UseStageMarker() مثل ذلك:

appBuilder.UseStaticFiles();
//allows owin middlwares to be executed earlier on in the pipeline.
appBuilder.UseStageMarker(PipelineStage.Authenticate);

هناك قراءة جيدة جدًا عنه هنا:

باستطاعتك العثور UseStageMarker داخل Microsoft.Owin الحزمة هنا: https://www.nuget.org/packages/Microsoft.Owin/

آمل أن يساعد هذا شخص آخر.

شكرًا

ستيف

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top