2016-01-29 11 views
9

प्राप्त करें यदि यूआरएल में एप्लिकेशन पथ में एक अलग आवरण है तो मैं यूआरएल को फिर से लिखने का एक तरीका ढूंढ रहा हूं। चूंकि एप्लिकेशन पथ अलग-अलग तैनाती के लिए अलग-अलग हो सकता है, इसलिए मुझे इसे गतिशील रूप से एक्सेस करना होगा। क्या ऐसा करने का कोई तरीका है?आईआईएस यूआरएल रिवाइट मॉड्यूल: एप्लीकेशनपैथ

पृष्ठभूमि:

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

उदाहरण

के एक तैनाती के लिए मान लेते हैं कि चलो, आवेदन के लिए उर्फ ​​"applicationâ" है (एक और तैनाती के लिए, उर्फ ​​"ApplicationB" हो सकता है)।

http://<host>:<port>/<applicationA or Applicationa or APPLicationA etc.>/<rest of the url> 

Redirect to 

http://<host>:<port>/ApplicationA/<rest of the url> 
+0

@NikolaiDante कृपया संपादन देखें। –

+0

क्या नियम हमेशा एक अपरकेस अक्षर में शुरू और समाप्त होगा, लेकिन बीच लोअरकेस होना चाहिए? – NikolaiDante

+0

नहीं, उपनाम [ए-ज़ा-जे 0-9] + हो सकता है, और फिर से लिखना चाहिए जब यूआरएल का यह उपनाम अलग-अलग मामले में होता है। –

उत्तर

0

सुनिश्चित नहीं हैं कि अगर फिर से लिखने आपके मामले में सही संचालन है, हो सकता है आप का उपयोग करना चाहिए अनुप्रेषित (स्थायी), लेकिन नीचे दिए गए नियम जो मुझे विशिष्ट मामले में आवेदन नाम लाने की अनुमति दी है:

<system.webServer> 
    <rewrite> 
     <rules> 
      <rule name="My Rule" stopProcessing="true"> 
       <match url="^(.+)" ignoreCase="false" /> 
       <conditions> 
        <add input="{REQUEST_URI}" pattern="TmP/.+" ignoreCase="false" negate="true" /> 
        <add input="{REQUEST_URI}" pattern="tmp/(.+)" ignoreCase="true" /> 
       </conditions> 
       <action type="Redirect" url="TmP/{C:1}" /> 
      </rule> 
     </rules> 
    </rewrite> 
</system.webServer> 
+0

तो, यदि वेब ऐप का वर्चुअल पथ "टीएमपी" है, तो तभी यह काम करेगा, है ना? –

+0

हाँ, अन्यथा यह टीएमपी पर रीडायरेक्ट करेगा – Uriil

0

मुझे लगता है कि एक कस्टम Http Module बनाना और जोड़ना आपकी समस्या का समाधान कर सकता है। BeginRequest और EndRequest घटनाओं के जवाब में प्रत्येक अनुरोध पर एक HTTP मॉड्यूल कहा जाता है।

आप यूआरएल को गतिशील रूप से एक्सेस कर सकते हैं और इसके मामले को बदलकर इसे रीडायरेक्ट कर सकते हैं।

private void PreRequestHandlerExecute(object sender, EventArgs e) 
    { 
     HttpApplication app = sender as HttpApplication; 
     var f = req.Url; 
     f="Change case of URL"; 
     if (condition) 
     { 

      app.Response.Redirect(f); 
     } 

    } 
0

अपडेट किया गया

मेरा सुझाव है मई आप एक HttpModule का उपयोग कर BeginRequest घटना की सदस्यता लें।

RewritePath विधि आप Redirect है, जहां आप बस से मेल खाते हैं और URL रीराइट अगर आवरण गलत है, ... या वास्तव में सिर्फ समायोजित आवरण पहले यह जांच करने के लिए की तुलना में तेजी से हो सकता है और फिर समायोजित के खिलाफ गति हासिल होगा साथ

(समाधान लेने से पहले परीक्षण करें और देखें)।

एक सकारात्मक पक्ष प्रभाव आप आसानी से अन्य परीक्षण में डाल दिया और अपवाद आदि

public class AdjustCasingModule : IHttpModule 
{ 
    public void Init(HttpApplication application) 
    { 
     application.BeginRequest += OnBeginRequest; 
    } 

    protected void BeginRequest(object sender, EventArgs e) 
    { 
     var httpContext = ((HttpApplication)sender).Context; 

     string[] path = httpContext.Request.Path.Split('/'); 

     if (path[1].Length > 0) 
     { 
      Regex rgx = new Regex(@"^[A-Z][a-z]*[A-Z]"); 

      if (!rgx.IsMatch(path[1])) 
      { 
       char[] a = path[1].ToLower().ToCharArray(); 
       a[0] = char.ToUpper(a[0]); 
       a[char.Length - 1] = char.ToUpper(a[char.Length - 1]); 
       path[1] = new string(a); 
       httpContext.RewritePath(String.Join('/', path)); 
      } 
     } 
    } 

    public void Dispose() 
    { 

    } 
} 
कर सकते हैं

साइड नोट:

मैं अब भी पहले में लोअर केस पथ का उपयोग की सलाह देते हैं जगह।

0

बस एक विचार है, अगर एक उदाहरण लोअरकेस * (applicationâ) के लिए मजबूर करने के पक्ष में ऊंट मामले संकेतन (applicationâ) को छोड़ पर विचार करेंगे, तो आप उपयोग ToLower के रूप में नीचे कीवर्ड सकता है।

<system.webServer> 
    <rewrite> 
     <rules> 
      <rule name="force lowercase" stopProcessing="true"> 
       <match url="(.*)" /> 
       <conditions> 
        <add input="{URL}" pattern="[A-Z]" ignoreCase="false" /> 
       </conditions> 
       <action type="Redirect" url="{ToLower:{URL}}" redirectType="Temporary" /> 
      </rule> 
     </rules> 
    </rewrite> 
</system.webServer> 

* यदि आप यूआरएल में अपने मूल CamelCase अंकन के लिए प्रतिबद्ध हैं तो मैं ऊपर Uriil के दृष्टिकोण के लिए स्थगित कर दें।

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