मुझे कोणीय जेएस का उपयोग करके एक समान समस्या का सामना करना पड़ा, और इस मुद्दे को हल करने के लिए थोड़ा अलग दृष्टिकोण का उपयोग किया।
हमने ओविन का उपयोग एसपीए (index.html) के प्रवेश बिंदु पर एक मार्ग को मैप करने के लिए किया था। यह आपको एसपीए तक पहुंचने और विभिन्न पृष्ठों पर नेविगेट करने की अनुमति देता है। हालांकि, अगर आपने कभी पृष्ठ को ताज़ा किया है तो आपको 404 मिलेंगे। अनिवार्य रूप से, एंगुलरजेएस की रूटिंग और ओविन/कटाना का मार्ग एक दूसरे के पैर की उंगलियों पर कदम उठा रहा था।
मैंने कस्टम प्रतिनिधिमंडल बनाने के द्वारा इस मुद्दे को हल किया। जब भी ओविन/कटाना अनुरोध से मेल खाने वाला मार्ग ढूंढने में असमर्थ होते हैं तो यह प्रतिनिधि हैंडलर का उपयोग किया जाता है (404)।
public class CustomDelegatingHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
Task<HttpResponseMessage> response = base.SendAsync(request, cancellationToken);
if (response.Result.StatusCode == HttpStatusCode.NotFound)
{
response.Result.Content = new StringContent(File.ReadAllText(@"index.html"));
response.Result.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
response.Result.StatusCode = HttpStatusCode.OK;
}
return response;
}
}
रिटर्न index.html ऊपर टुकड़ा, स्पा के प्रवेश बिंदु, जब हम एक पृष्ठ अनुरोध मिलान खोजने में असमर्थ हैं।
आदेश में इस delegating हैंडलर का उपयोग करने के लिए आपको अपने HttpConfiguration में निम्न पंक्ति जोड़ना होगा() जब Owin मेजबान शुरू करने:
var httpConfig = new HttpConfiguration();
httpConfig.MessageHandlers.Add(new CustomDelegatingHandler());
संक्षेप में, मैं एक डिफ़ॉल्ट रूट कि एसपीए के लिए नक्शे है, और कोई अपरिचित मार्ग DelegatingHandler के माध्यम से जाएगा और एक ही एसपीए की सेवा करेगा। हम Request.Path को संशोधित नहीं करते हैं, जिससे एसपीए उचित पृष्ठ पर अनुरोध को रूट करने की इजाजत देता है।
तो क्या आप चाहते हैं कि कोई भी सर्वर स्थिर फ़ाइल मिडलवेयर का उपयोग कर index.html की सेवा करने के लिए सर्वर को मार रहा हो? – khellang
हाँ, कोई भी मार्ग (या कोई भी मार्ग मिलान '/ ऐप/* ')' index.html' फ़ाइल लौटाएगा। –