2012-11-07 31 views
24

में स्थिर सामग्री कैसे पेश करें मुझे नैन्सी में जावास्क्रिप्ट जैसी स्थिर सामग्री की सेवा करने में समस्या हो रही है।नैन्सी

का उपयोग कर self hosting sample मैं दृश्य फ़ोल्डर में एक test.js जोड़ा गया है और staticview.html पृष्ठ के लिए एक

<script type="text/javascript" src="test.js"></script> 

टैग जोड़ लिया उदाहरण के लिए

। यदि मैं ब्राउज़र में इस पृष्ठ को देखता हूं तो जावास्क्रिप्ट को सही तरीके से निष्पादित किया जाता है।

हालांकि जब मैं नमूना चलाता हूं तो जावास्क्रिप्ट निष्पादित नहीं होता है। अगर मैं फायरबग में पेज देखता हूं तो मुझे लगता है कि मुझे test.js. के लिए 404 त्रुटि मिल रही है।

मैं

Get["{file}"] = p => 
{ 
    string path = string.Format("Views/{0}", p.file); 
    return Response.AsJs(path); 
}; 

जोड़ने की कोशिश की है और मैं भी कोशिश की है जब मैं एक ब्रेक बिंदु निर्धारित और तत्काल खिड़की मैं NotFound

के StatusCode पाने में Response.AsJs (पथ) पर अमल

protected override void ConfigureConventions(NancyConventions conventions) 
{ 
    base.ConfigureConventions(conventions); 
    conventions.StaticContentsConventions.Add(
     StaticContentConventionBuilder.AddDirectory("/", "Views")); 
    conventions.StaticContentsConventions.Add(
     StaticContentConventionBuilder.AddDirectory("Views", "Views")); 
} 

मैं क्या कर रहा हूं एक स्टेटिककंटेंट कन्वेंशन जोड़ना

उत्तर

34

आप NancyConventions का उपयोग कर स्थिर सामग्री को कॉन्फ़िगर कर सकते हैं। निम्नलिखित बूटस्ट्रैपर से कोड का उपयोग करके आप अपने आवेदन की जड़ पर "स्थिर" नामक फ़ोल्डर के अंदर अपनी सभी स्थिर सामग्री (सीएसएस/जेएस/एचटीएमएल/आदि) डाल सकते हैं।

namespace Application 
{ 
    public class ApplicationBootstrapper : DefaultNancyBootstrapper 
    { 
     protected override void ConfigureConventions(NancyConventions nancyConventions) 
     { 
      nancyConventions.StaticContentsConventions.Add(StaticContentConventionBuilder.AddDirectory("Static", @"Static")); 
      base.ConfigureConventions(nancyConventions); 
     } 
    } 
} 

इस के बाद किया जाता है आप इस तरह स्क्रिप्ट

<script type="text/javascript" src="/static/test.js"></script> 

या सीएसएस

<link rel="stylesheet" type="text/css" href="/static/styles.css"> 
+2

आधार से पहले अपने सम्मेलनों को जोड़ना। कॉन्फ़िगर करें कॉन्फ़िगरेशन (nancyConventions); 'मेरे लिए महत्वपूर्ण था – Suhas

+1

स्थिर फ़ाइल के गुणों को भी चिह्नित करें आउटपुट निर्देशिका में कॉपी करें = यदि नई – LosManos

+1

नई फ़ाइल को कॉपी करें तो स्थिर फ़ाइल के गुणों को चिह्नित करें' आउटपुट निर्देशिका में कॉपी करें = अगर नई ' – LosManos

1

एक स्वयं के लिए नैन्सी ऐप होस्ट किया गया, मुझे लगता है कि आपको फ़ाइलों को एम्बेडेड संसाधनों के रूप में चिह्नित करने की आवश्यकता है - आप विचारों के लिए करते हैं। विचारों के लिए आप फिर भी अपने bootstrapper में ऐसा करने की जरूरत:

protected override NancyInternalConfiguration InternalConfiguration 
{ 
    get 
    { 
    return NancyInternalConfiguration.WithOverrides(
     x => x.ViewLocationProvider = typeof (ResourceViewLocationProvider)); 
    } 
} 

आप शायद कुछ इसी तरह करना है।

वैकल्पिक रूप से आपको (स्मृति से) उपयोग करना चाहिए। एएसजेएस के बजाय .एसजेएसफ़ाइल।

+0

मुझे स्पष्ट नहीं है कि मुझे एंबेडेड संसाधन सेट करने की आवश्यकता है, और जब मुझे हमेशा कॉपी सेट करने की आवश्यकता होती है। वीएस डिबगिंग में, नैन्सी स्वयं होस्टिंग का उपयोग करके, एंबेडेड संसाधन आवश्यक नहीं लगता है लेकिन प्रतिलिपि हमेशा है। – bbsimonbb

28

के रूप में स्थिर सामग्री का उपयोग कर सकते है आप किसी भी सम्मेलनों कॉन्फ़िगर करने के लिए यदि आप विशेष कारणों की जरूरत नहीं है की जरूरत नहीं है ।

नैन्सी ... एक डिफ़ॉल्ट परंपरा है कि आपके आवेदन की content रास्ते में फ़ाइलों के लिए दिखेगा के साथ भेज दिया है।

NancyFx | Managing static content

से मैं सिर्फ ऐसा करने से ही प्राप्त किया:

  1. , परियोजना "सामग्री" कहा जाता है में एक फ़ोल्डर जोड़ें स्थिर सामग्री वहाँ (.js जोड़ें। एक्सएपी, .ico, ...)
  2. प्रत्येक सामग्री फ़ाइल के लिए, इसकी गुण सेट करें: बिल्ड करें: एम्बेडेड संसाधन; आउटपुट निर्देशिका में कॉपी करें: नई अगर कॉपी करें।
  3. बदलें पथ, नए स्थान मैच के लिए उदाहरण के लिए:

<script type="text/javascript" src="content/test.js"></script>

+1

इसे सही उत्तर के रूप में चिह्नित किया जाना चाहिए! –

3

सिर्फ पूर्णता के लिए जोड़ा जा रहा है: आप स्वयं मेजबान में नैन्सी चल रहा है और दृश्य स्टूडियो डीबगिंग के माध्यम से चल रहा है कर रहे हैं तो, और आप लगता है कि आपको सभी स्थिर सामग्री अनुरोधों के लिए 404 मिल रहे हैं, आपको यह सुनिश्चित करना होगा कि निर्माण कार्य आपकी सभी स्थिर सामग्री फ़ाइलों के लिए "हमेशा कॉपी करें" पर सेट हो!

आप ऐसा करते हैं तो ऐसा नहीं करते हैं इन फ़ाइलों को अपने उत्पादन निर्देशिका को कॉपी नहीं किया जाएगा और इसलिए 404.

1

पहली बार हर एक समाधान साझा करने ऑनलाइन मौजूद नहीं करेगा, इसलिए। मुझे एक त्वरित हैक खोजने में 4 दिन लग गए जो ट्यूटोरियल्स के माध्यम से चलने और नॅन्सी सीखने के रूप में काम करेगा। यहाँ आसान उपाय है:

"buildOptions": { 
"emitEntryPoint": true, 

"copyToOutput": [ "Views/Car/*" ] 
}, 

इसके बाद, अपने CarModule.cs पर जाएँ::

Get("/status", _ => View["Car"]); 

जब आप संकलन

करें कि आपने अपने project.json फ़ाइल में सही सेटअप सुनिश्चित करें पहली बार कोड आपका दृश्य काम करेगा।

बदलें:

Get("/status", _ => View["Car"]); 

रहे हैं:

Get("/status", _ => View["Car.html"]); 

हम चाल संकलक इसे संलग्न करने की जरूरत है सोचने के लिए लेकिन, आप एचटीएमएल संपादित करें और फिर संकलन करने की कोशिश के बाद आप इस छोटे हैक की जरूरत है असेंबली के लिए एचटीएमएल।

मुझे आशा है कि इससे मेरे जैसे नोबों की मदद मिलती है जो उपरोक्त टिप्पणियों से सीधे नैसीएफएक्स दस्तावेज से ज्यादा काम नहीं कर सकती हैं।