आप इसका उपयोग कर सकते हैं।
चरण 1. का उपयोग करता है 7 एकीकृत मोड TransferRequestHandler को फाइल एक्सटेंशन का मिलान
आईआईएस HTTP हैंडलर मैपिंग एक HTTP हैंडलर के लिए जो बिंदु पथ/क्रिया संयोजन। उदाहरण के लिए, एक डिफ़ॉल्ट हैंडलर मैपिंग है जो साइट के चल रहे .NET रनटाइम संस्करण के लिए उपयुक्त ISAPI मॉड्यूल के लिए पथ = "*। Axd" verb = "GET, HEAD, POST, DEBUG" को इंगित करता है। आईआईएस एक्सप्रेस के तहत डिफ़ॉल्ट हैंडलर देखने का सबसे आसान तरीका आईआईएस एक्सप्रेस के तहत एक साइट चलाने के लिए है, सिस्टम ट्रे में आईआईएस एक्सप्रेस आइकन पर राइट-क्लिक करें, "सभी एप्लिकेशन दिखाएं" पर क्लिक करें, और साइट पर क्लिक करें। नीचे दिए गए applicationhost.config लिंक को लिंक किया गया है, इसलिए आप बस उस पर क्लिक कर सकते हैं और इसे विजुअल स्टूडियो में लोड करना चाहिए।
यदि आप नीचे स्क्रॉल करते हैं, तो आप देखेंगे कि path="*" verb="*"
के लिए एक कैचल स्टेटिकफ़ाइल मानचित्रण है जो StaticFileModule,DefaultDocumentModule,DirectoryListingModule
पर इंगित करता है। यदि आप कुछ भी नहीं करते हैं तो यही आपके .html अनुरोध को संभालेगा। तो पहला कदम अपने web.config में एक हैंडलर जोड़ना है जो TransferRequestHandler
पर अनुरोध करेगा। TransferRequestHandler
वह हैंडलर है जो एमवीसी मार्गों में देखने के लिए उपयोग किए जाने वाले विस्तारित यूआरएल का ख्याल रखता है, उदाहरण के लिए /store/details/5
।
हैंडलर मैपिंग जोड़ना वास्तव में आसान है - बस अपना web.config खोलें और इसे <system.webServer/handlers>
नोड में जोड़ें।
<add name="HtmlFileHandler" path="*.html" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
ध्यान दें कि यदि आप चाहें तो पथ को अधिक विशिष्ट बना सकते हैं। उदाहरण के लिए, यदि आप केवल एक विशेष अनुरोध रोकना चाहता था, आप पथ = "sample.html"
चरण 2. इस्तेमाल कर सकते हैं मार्ग
अगला विन्यास, आप एक नया मार्ग की आवश्यकता होगी। App_Start/RouteConfig.cs
खोलें और इसे RegisterRoutes
कॉल पर खोलें। मेरा पूरा RegisterRoutes
इस तरह दिखता है:
routes.MapRoute(
name: "XMLPath",
url: "sitemapindex.xml",
defaults: new { controller = "Home", action = "Html", page = UrlParameter.Optional }
);
चरण 3. मार्ग मौजूदा फ़ाइलों
यह लगभग यह शामिल किया गया है, लेकिन वहाँ की देखभाल करने के एक और बात है - अधिभावी अनुरोध करता है कि किसी मौजूदा फ़ाइल से मेल खाते हैं। अगर आपके पास myfile.html नामक एक वास्तविक फ़ाइल है, तो रूटिंग सिस्टम आपके मार्ग को चलाने की अनुमति नहीं देगा। मैं इसके बारे में भूल गया, एक HTTP 500 त्रुटि (रिकर्सन ओवरफ्लो) के साथ समाप्त हुआ और मदद के लिए एइलॉन लिपटन से पूछना पड़ा।
वैसे भी, यह ठीक करना आसान है - बस मार्ग जोड़ें। रूटएक्सस्टिंगफाइल = अपने मार्ग पंजीकरण के लिए सच है। मेरा पूरा रजिस्टर रूट कॉल इस तरह दिखता है:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.RouteExistingFiles = true;
routes.MapRoute(
name: "CrazyPants",
url: "{page}.html",
defaults: new { controller = "Home", action = "Html", page = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
यही है।
मैं इस नियंत्रक कार्रवाई जोड़कर परीक्षण किया:
public FileResult Html()
{
var stringBuilder = new StringBuilder();
stringBuilder.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
stringBuilder.AppendLine("<sitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">");
stringBuilder.AppendLine("<sitemap>");
stringBuilder.AppendLine("<loc>http://sprint-newhomes.move.com/sitemaps/sitemap_01.xml</loc>");
stringBuilder.AppendLine("<lastmod>" + DateTime.Now.ToString("MMMM-dd-yyyy HH:mm:ss tt") + "</lastmod>");
stringBuilder.AppendLine("</sitemap>");
stringBuilder.AppendLine("<sitemap>");
stringBuilder.AppendLine("<loc>http://sprint-newhomes.move.com/sitemaps/sitemap_02.xml</loc>");
stringBuilder.AppendLine("<lastmod>" + DateTime.Now.ToString("MMMM-dd-yyyy HH:mm:ss tt") + "</lastmod>");
stringBuilder.AppendLine("</sitemap>");
stringBuilder.AppendLine("</sitemapindex>");
var ms = new MemoryStream(Encoding.ASCII.GetBytes(stringBuilder.ToString()));
Response.AppendHeader("Content-Disposition", "inline;filename=sitemapindex.xml");
return new FileStreamResult(ms, "text/xml");
}
मैं वास्तव में इस आज पहले की कोशिश की, लेकिन क्योंकि मैं डिफ़ॉल्ट मार्ग _after_ मार्ग कहा कि यह काम करने के लिए नहीं मिल सका। इसे काम करने के लिए डिफ़ॉल्ट मार्ग _before_ डालने की आवश्यकता है। धन्यवाद। – HaakonL
system.web सर्वर के अंदर अपने मॉड्यूल कॉन्फ़िगरेशन के लिए runAllManagedModulesForAllRequests = "true" को भी याद रखना याद रखें, अन्यथा यह staticfile हैंडलर का उपयोग करने का प्रयास करेगा और यह 404 –
@RaulVejar वापस आ जाएगा! मैं एक घंटे से अधिक समय तक इंटरनेट खोज रहा हूं और आप मॉड्यूल टुकड़े का उल्लेख करने वाले पहले व्यक्ति हैं। यह मेरी समस्या हल हो गया। – ddilsaver