आप ASP.NET MVC में ~ / Views फ़ोल्डर के तहत स्थैतिक .html फ़ाइलों का अनुरोध कैसे करते हैं?


92

मैं स्थिर .htmlफ़ाइलों का अनुरोध करने में सक्षम होना चाहता हूं जो ~/Viewsफ़ोल्डर में स्थित हैं । दस्तावेज़ीकरण के अनुसार, रूटिंग सिस्टम यह देखने के लिए जांचता है कि क्या एप्लिकेशन के मार्गों का मूल्यांकन करने से पहले कोई URL डिस्क फ़ाइल से मेल खाता है या नहीं।

लेकिन जब मैं फ़ाइल का अनुरोध करता हूं तो एक 404त्रुटि उत्पन्न होती है।

मेरी फ़ाइल ~ / दृश्य फ़ोल्डर में स्थित है। URL है:http://[localhost]/Views/HtmlPage1.html

मुझे क्या याद किया?

जवाबों:


111

मैं स्थिर .html फ़ाइलों का अनुरोध करने में सक्षम होना चाहता हूं जो '~ / Views' फ़ोल्डर में स्थित हैं।

आप नहीं कर सकते। इस फ़ोल्डर में एक web.config फ़ाइल है जो स्पष्ट रूप से किसी भी फ़ाइल तक पहुँचने से मना करती है। यदि आप क्लाइंट से फ़ाइलों को एक्सेस करने में सक्षम होना चाहते हैं, तो उन फ़ाइलों को Viewsफ़ोल्डर में नहीं रखा जाना चाहिए जिनका ASP.NET MVC में एक विशेष अर्थ है।

आपके पास एक ~/Staticफ़ोल्डर हो सकता है जहाँ आप अपनी HTML फ़ाइलें रख सकते हैं। और फिर इसे इस तरह एक्सेस करें:

http://example.com/yourapplicationname/static/foo.html

4
या, अपने फ़ोल्डर 'स्टेटिक' का नामकरण करने के बजाय, आप उस नियंत्रक नाम संरचना की नकल कर सकते हैं जो कि दृश्य फ़ोल्डर के अंदर पाई जाती है। इसलिए URL में समान 'उपस्थिति' है। उदाहरण के लिए चूंकि आप दृश्य / आदेश / Edit.html में अपना प्लेनजेन Edit.html नहीं डाल सकते हैं - आप इसे ~ / ऑर्डर / Edit.html में डाल सकते हैं
bkwdesign

2
यह अब नवीनतम ASP.NET (vNext) के साथ बदल गया है, जहाँ आप html फ़ाइलों के लिए स्थैतिक प्रदाता को पंजीकृत कर सकते हैं लेकिन फिर भी सामान्य MVC रास्ता तय कर सकते हैं। केवल इसके साथ एक त्वरित खेल था लेकिन मैंने एक परीक्षण परियोजना के साथ ऐसा किया। लिनक्स पर kestrel के माध्यम से चल रहा है .. लेकिन IIS वही होना चाहिए जो मुझे लगता है।
पायोटर कुला

1
@bkwdesign मुझे यकीन है कि फ़ोल्डर कॉन्फ़िगरेशन की नकल करके नियंत्रित किया गया इसका कॉन्फ़िगरेशन मेरे नियंत्रकों डिफ़ॉल्ट हैंडलर को गड़बड़ कर गया और इसे अस्वीकार्य बना दिया। इसलिए इस स्थिति का परीक्षण करें।
हंटर-ओरियनोइर

78

दृश्य फ़ोल्डर में js और html जैसी फ़ाइलों को अनुमति देने के लिए, वेब-कॉनफ़िगर को विचारों-फ़ोल्डर में संपादित करें:

<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>


1
मुझे लाइन को हटाना पड़ा "मार्गों। RouteExistingFiles = true;" इस के लिए काम करने के लिए RouteConfig.RegisterRoutes में
सैम सिप्पे

जबकि चिन्हित उत्तर में उपयोगी जानकारी होती है, यह बेहतर उत्तर है। मेरी वर्तमान परियोजना में परीक्षण किया गया और काम किया गया।
ए। मुरैना

1
सीएसएस फ़ाइलों के बारे में क्या?
Leandro

@ डारिन दिमित्रोव का जवाब एक समाधान देता है, लेकिन इसे उत्तर के रूप में चिह्नित किया जाना चाहिए
कुणाल

31

मैं स्थिर .html फ़ाइलों का अनुरोध करने में सक्षम होना चाहता हूं जो ~ / व्यू फ़ोल्डर में स्थित हैं।

खैर आप कर सकते हैं। चिह्नित उत्तर पूरी तरह से सही नहीं है, हालांकि यह एक समाधान देता है।

चिह्नित उत्तर में तर्क सही है, यह दृश्य फ़ोल्डर में web.config (ब्लॉकव्यूहैंडलर सेटिंग विशिष्ट होने के लिए) है जो फाइलों को सीधे एक्सेस करने से रोकता है। यह Asp.Net MVC में विचारों को सुरक्षित करने के लिए है। लेकिन अगर आपने इन फ़ाइलों को सीधे सेवा देने के बारे में एक सवाल पूछा है, तो आपके पास ऐसा करने का एक वैध कारण है, जैसे कि AngularJS आंशिक विचार (हमारे मामले में) का उपयोग करना जहां हम अजीब नामों के साथ विचार फ़ोल्डर की नकल नहीं करना चाहते हैं।

तो यहाँ एक बहुत ही सरल ट्वीक है जिसे आप अपने asp.net mvc दृश्यों की सुरक्षा से समझौता किए बिना व्यू फ़ोल्डर में मिली web.config फ़ाइल में कर सकते हैं। यह हमेशा की तरह .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" />

3
यह अभी भी अन्य फ़ाइलों जैसे .aspx या .ascx फ़ाइलों या तृतीय-पक्ष दृश्य इंजनों से खतरनाक हो सकता है। Cs3x के उत्तर के अनुसार श्वेतसूची के लिए बहुत बेहतर है।
pwdst

1
@pwdst: यदि आप सर्वर साइड दृश्यों के मिश्रण का उपयोग कर रहे हैं, तो हाँ अलग-अलग प्रकार के व्हाइटलाइनिंग बेहतर हो सकते हैं। हम सिर्फ .cshtml फ़ाइलों की सुरक्षा करना चाहते हैं, इसलिए हमने इसका उपयोग किया क्योंकि यह थोड़ी कम क्रिया है।
विकास

14

एक अन्य वैकल्पिक विकल्प HTML फ़ाइल की सेवा के लिए किसी भी वांछित नियंत्रक में एक एक्शन विधि सम्मिलित करना है

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

एचटीएमएल को http: // योराइट / कंट्रोलर / MyHtml के रूप में एक्सेस करें । आप इस एक्शन मेथड को एचटीएमएल फाइल नाम को विधि / क्वेरिस्ट्राइन पैरामीटर के रूप में स्वीकार करने के लिए बढ़ा सकते हैं और फ़ाइल को रन टाइम पर रेंडर कर सकते हैं, जैसे कुछ इस तरह।

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

0

यदि आप दृश्य फ़ोल्डर के अंदर उपयोग करने की योजना बना रहे हैं, तो उपरोक्त उत्तर सबसे अच्छे होने चाहिए, लेकिन यह उत्तर उन उपयोगकर्ताओं के लिए उपयोगी हो सकता है, जो asp.net mvc core की ओर पलायन कर रहे हैं। दृश्य फ़ोल्डर के बजाय wwwroot में फ़ाइलों को रखने से आपके html पृष्ठों को स्थानीयहोस्ट / myfile.html के रूप में आसानी से एक्सेस किया जाना चाहिए

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.