2017-04-02 7 views
6

मेरी asp.net कोर एप्लिकेशन (कोणीय 4 सामने के छोर) में मैं इस तरह का URL स्वीकार करते हैं:आगे नए सिरे से लिखना एक क्वेरी पैरामीटर में स्लैश

example.com/report;url=http%3A%2F%2Fexample2.com 

मैं रीराइट नियम है कि लोगों को प्रवेश करने की अनुमति बनाना चाहेंगे निम्नलिखित यूआरएल:

example.com/report;url=http://example2.com 

मुझे यह नहीं पता कि यह कैसे किया जाए।

मैंने कोशिश की:

var options = new RewriteOptions() 
    .AddRewrite(@"(.*);url=http:\/\/([^;]*)(.*)", "$1;url=http%3A%2F%2F$2$3", skipRemainingRules: false) 
    .AddRewrite(@"^report.*", "index.html", skipRemainingRules: true) 

app.UseRewriter(options); 

यह काम नहीं किया लेकिन तो भी यह किया था यह यूआरएल डोमेन के बाद स्लैश है, यानि कि उप निर्देशिका के लिए खाते में नहीं होता। एक समूह मिलान पैटर्न का उपयोग करना मुझे लगता है कि ऐसा करना असंभव है। इसे & मिलान किए गए समूह पर प्रकार के ऑपरेशन को प्रतिस्थापित करने की आवश्यकता है।

अन्य वेबसर्वरों में यह स्लेश को डीकोड करने के लिए कॉन्फ़िगर करने योग्य विकल्प के रूप में है। मुझे एएसपीनेट कोर डॉक्स में इसका कोई संदर्भ नहीं मिल रहा है। क्या यह संभव है?

+0

का मूल्य एन्कोड करने के लिए AFAIK आप अपने बीच एक रिवर्स प्रॉक्सी का उपयोग करने के लिए है है। नेट-कोर ऐप और इंटरनेट। मैंने इसके लिए Nginx का इस्तेमाल किया। क्या आपने वहां फिर से लिखने की कोशिश की है? मुझे लगता है कि यह काम करना चाहिए। बीटीडब्लू, कुछ और के रूप में निर्देशिकाओं का उपयोग करना एक अच्छा विचार नहीं है, जब तक कि वे आपकी एमवीसी संरचना से संबंधित न हों, लेकिन फिर आप पुन: लिखने का उपयोग नहीं करेंगे, आप नियंत्रकों को पैटर्न से मिलान करेंगे (या सरल सीएमएस के लिए, सबकुछ से मेल खाने के लिए 1 नियंत्रक का उपयोग करें और फिर नियंत्रक के भीतर यूआरएल-एस को संसाधित करें)। यदि एमवीसी का उपयोग करते हैं तो आप आवश्यकता होने पर 'रीडायरेक्ट' प्रतिक्रिया वापस कर सकते हैं। – Harry

+0

आप अपने ऐप को होस्ट करते हैं? आईआईएस, nginx, आत्म-होस्टिंग? – Evk

+5

आप पैरामीटर को वास्तव में पैरामीटर रखने के लिए क्वेरी स्ट्रिंग का उपयोग क्यों नहीं कर सकते हैं यानी '?' का उपयोग करें और अपना यूआरएल 'example.com/report? Url = http: // example2.com' पर बदलें? और फिर आपको शायद किसी भी यूआरएल को फिर से लिखने की आवश्यकता नहीं होगी। – SergGr

उत्तर

0

आप यूआरएल के लिए पैरामीटर पास करना चाहते हैं। उपयोगकर्ता को पता बार में पैरामीटर के रूप में यूआरएल दर्ज करने की अनुमति देकर आप जो चाहते हैं उसे पाने का कोई तरीका नहीं है। इसे हमेशा एन्कोड करने की आवश्यकता होगी।

बजाय:

http://example.com/report;url=http%3A%2F%2Fexample2.com 

उपयोग:

http://example.com/report?url=http%3A%2F%2Fexample2.com 

बल्कि उपयोगकर्ता एक ब्राउज़र पता पट्टी में यह सब दर्ज की तुलना में, मैं बजाय एक यूजर इंटरफेस के लिए एक उपयोगकर्ता की अनुमति देता है कि पैदा करेगा एक रिपोर्ट के लिए पूछें और सबमिट हिट करें। रिपोर्ट को यूआरएल के लिए टेक्स्टबॉक्स की आवश्यकता होगी और यूआरएल टेक्स्टबॉक्स की सामग्री को 'url' पैरामीटर में एन्कोड करने के बाद यह आपकी साइट पर एक अनुरोध प्राप्त करेगा।

एक यूआरएल पुनः लिखने के मॉड्यूल का उपयोग शायद यहां अनाज के खिलाफ जा रहा है।

+0

का सुझाव देता है, मैं निश्चित रूप से अपने आवेदन के भीतर पैराम पास कर रहा हूं। समस्या यह नहीं है। अन्य वेबसर्वर में मैंने अनुरोध किए गए लिंक की अनुमति देने के लिए यूआरएल में स्लैश को डीकोड करना संभव है। मेरा सवाल यह है कि केस्ट्रेल/एएसपीनेट कोर में इसे कैसे किया जाए। – Guerrilla

+0

मैं कोणीय रूटिंग का उपयोग कर रहा हूं इसलिए मुझे मैट्रिक्स क्वेरी पैरामीटर शैली का उपयोग करने की आवश्यकता है – Guerrilla

0

दुर्भाग्य से रिवाइटरूल क्लास के कोड के आधार पर, यह संभव नहीं है। आपको अपना खुद का कस्टम रीराइट नियम बनाने में सक्षम होना चाहिए, हालांकि आपके अनुरोध पथ के आईर्यूल इंटरफेस और यूआरएल एनकोड को लागू करेगा।

RewriteRule के स्रोत कोड यहाँ पाया जा सकता है https://github.com/aspnet/BasicMiddleware/blob/dev/src/Microsoft.AspNetCore.Rewrite/Internal/RewriteRule.cs

और यहाँ UrlEncoder 'url' https://github.com/dotnet/corefx/blob/master/src/System.Text.Encodings.Web/src/System/Text/Encodings/Web/UrlEncoder.cs

संबंधित मुद्दे