उरी में मेजबान की जगह


85

.NET का उपयोग करके Uri के होस्ट-पार्ट को बदलने का सबसे अच्छा तरीका क्या है?

अर्थात:

string ReplaceHost(string original, string newHostName);
//...
string s = ReplaceHost("http://oldhostname/index.html", "newhostname");
Assert.AreEqual("http://newhostname/index.html", s);
//...
string s = ReplaceHost("http://user:pass@oldhostname/index.html", "newhostname");
Assert.AreEqual("http://user:pass@newhostname/index.html", s);
//...
string s = ReplaceHost("ftp://user:pass@oldhostname", "newhostname");
Assert.AreEqual("ftp://user:pass@newhostname", s);
//etc.

System.Uri की ज्यादा मदद नहीं लगती है।

जवाबों:


147

System.UriBuilder क्या आप के बाद कर रहे हैं ...

string ReplaceHost(string original, string newHostName) {
    var builder = new UriBuilder(original);
    builder.Host = newHostName;
    return builder.Uri.ToString();
}

धन्यवाद कि वास्तव में मैं क्या देख रहा था।
रासमस फेबर

1
मैंने उरी वर्ग की सिफारिश की होगी, लेकिन मैं गलत होगा। अच्छा उत्तर।
जोनाथन सी डिकिन्सन

महान काम करता है, बस ध्यान दें कि यदि आप क्वेरी संपत्ति पढ़ते हैं, तो यह एक के साथ पहले से लिखा हुआ है? और यदि आप क्वेरी संपत्ति को एक स्ट्रिंग शुरुआत के साथ सेट करते हैं?, एक और। पूर्व निर्धारित किया जाएगा।
डेव

यदि आपको मूल या नए में निर्दिष्ट किया गया है, तो आपको बंदरगाहों को संभालना होगा।
सब्जेक्टिव रियलिटी

42

जैसा कि @ इस्माईल कहते हैं, आप System.UriBuilder का उपयोग कर सकते हैं। यहाँ एक उदाहरण है:

// the URI for which you want to change the host name
var oldUri = Request.Url;

// create a new UriBuilder, which copies all fragments of the source URI
var newUriBuilder = new UriBuilder(oldUri);

// set the new host (you can set other properties too)
newUriBuilder.Host = "newhost.com";

// get a Uri instance from the UriBuilder
var newUri = newUriBuilder.Uri;

3
मुझे संदेह है कि इसे प्रारूपण और पार्स करने के बजाय Uriकॉल करके उदाहरण प्राप्त करना बेहतर हो सकता newUriBuilder.Uriहै।
सैम

@ आप सही हैं, Uriसंपत्ति एक बेहतर विकल्प है। धन्यवाद। अपडेट किया गया।
आकर्षित नोकें

.Uriकॉल से सावधान । यदि आपके पास कुछ ऐसा है जो UriBuilderएक वैध उड़ी में अनुवाद नहीं करता है, तो यह फेंक देगा। इसलिए उदाहरण के लिए यदि आपको एक वाइल्डकार्ड होस्ट की आवश्यकता है जिसे *आप उस पर सेट कर सकते हैं .Host, लेकिन यदि आप कॉल करते हैं .Uriतो वह फेंक देगा। यदि आप कहते हैं तो UriBuilder.ToString()यह वाइल्डकार्ड के साथ उरी को वापस कर देगा।
क्यूबा के
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.