it-swarm.dev

كيف يمكنك طلب ملفات .html ثابتة ضمن مجلد ~/طرق العرض في ASP.NET MVC؟

أريد أن أكون قادرًا على طلب ملفات .html ثابتة موجودة في مجلد ~/Views. وفقًا للوثائق ، يتحقق نظام التوجيه لمعرفة ما إذا كان عنوان URL يطابق ملف القرص قبل تقييم مسارات التطبيق.

ولكن عندما أطلب الملف ، يظهر خطأ 404.

يوجد ملفي في مجلد ~/طرق العرض. عنوان URL هو: http://[localhost]/Views/HtmlPage1.html

ما فاتني؟

85
alex.mironov

أريد أن أكون قادرًا على طلب ملفات .html ثابتة موجودة في المجلد "~/طرق العرض".

لا يمكنك ذلك. يوجد ملف web.config في هذا المجلد يمنع صراحةً الوصول إلى أي ملف منه. إذا كنت تريد أن تكون قادرًا على الوصول إلى الملفات من العميل ، فلا يجب وضع تلك الملفات في المجلد Views الذي له معنى خاص في ASP.NET MVC.

يمكن أن يكون لديك مجلد ~/Static حيث يمكنك وضع ملفات HTML الخاصة بك. ثم الوصول إليها مثل هذا:

http://example.com/yourapplicationname/static/foo.html
102
Darin Dimitrov

للسماح لملفات مثل js و html في مجلد طرق العرض ، قم بتحرير web.config في مجلد طرق العرض:

<system.webServer>
<handlers>
  <add name="JavaScriptHandler" path="*.js" verb="*"
     preCondition="integratedMode" type="System.Web.StaticFileHandler" />      
  <add name="HtmlScriptHandler" path="*.html" verb="*"
     preCondition="integratedMode" type="System.Web.StaticFileHandler" />
  <remove name="BlockViewHandler"/>
  <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
71
cs3x

أريد أن أكون قادرًا على طلب ملفات .html ثابتة موجودة في مجلد ~/طرق العرض.

كذلك يمكنك. الإجابة المحددة غير صحيحة تمامًا ، رغم أنها تعطي حلاً.

السبب المنطقي في الإجابة المحددة صحيح ، فمن web.config (إعداد BlockViewHandler أن يكون محددًا) في مجلد طرق العرض الذي يمنع الوصول إلى الملفات مباشرة. هناك لتأمين وجهات النظر في Asp.Net MVC. ولكن إذا طرحت سؤالًا حول تقديم هذه الملفات مباشرةً ، فمن المحتمل أن يكون لديك سبب وجيه للقيام بذلك ، مثل استخدام طرق العرض الجزئية AngularJS (كما في حالتنا) حيث لا نريد تكرار مجلد طرق العرض بأسماء غريبة.

لذلك ، يوجد قرص بسيط للغاية يمكنك القيام به في ملف web.config الموجود في مجلد طرق العرض ، دون المساس بأمن طرق العرض asp.net mvc. سيؤدي ذلك إلى تأمين ملفات .cshtml كالمعتاد ولكن اترك ملفات .html الخاصة بك وحدها

غير هذا

<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode"    type="System.Web.HttpNotFoundHandler" />

--إلى--

<add name="BlockViewHandler" path="*.cshtml" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
31
Vikas

خيار بديل آخر هو إدراج طريقة إجراء في أي وحدة تحكم مطلوبة لخدمة ملف html

public ActionResult MyHtml()
{
    var result = new FilePathResult("~/Views/HtmlPage1.html", "text/html");
    return result;
}

قم بالوصول إلى html كـ http: // yoursite/controller/MyHtml . يمكنك تمديد طريقة الإجراء هذه لقبول اسم ملف html كمعلمة method/querystrign وتقديم الملف في وقت التشغيل ، مثل شيء من هذا القبيل.

 public ActionResult MyHtml(string htmlPageName)
 {
      var result = new FilePathResult($"~/Views/{htmlPageName}.html", "text/html");
      return result;
 }
13
Venkatesh Muniyandi

إذا كنت تخطط للاستخدام داخل مجلد العرض ، فيجب أن تكون الإجابات أعلاه أفضل ، لكن هذه الإجابة قد تكون مفيدة للمستخدمين الذين يهاجرون إلى asp.net mvc core. يؤدي وضع الملفات في wwwroot بدلاً من مجلد طرق العرض إلى جعل صفحات html الخاصة بك الوصول إليها بسهولة مثل localhost/myfile.html

0
Kurkula