मानक MVC5 रूटिंग विशेषताओं को बनाए रखते हुए उपडोमेन को पकड़ने के लिए, निम्न SubdomainRoute
व्युत्पन्न वर्ग का उपयोग करें Route
।
इसके अतिरिक्त, SubdomainRoute
उप-डोमेन को वैकल्पिक रूप से एक क्वेरी पैरामीटर , बनाने sub.example.com/foo/bar
और example.com/foo/bar?subdomain=sub
समकक्ष के रूप में निर्दिष्ट करने की अनुमति देता है । इससे आप DNS सबडोमेन कॉन्फ़िगर होने से पहले परीक्षण कर सकते हैं। क्वेरी पैरामीटर (उपयोग में होने पर) Url.Action
आदि द्वारा उत्पन्न नए लिंक के माध्यम से प्रचारित किया जाता है ।
क्वेरी पैरामीटर netsh से कॉन्फ़िगर किए बिना या व्यवस्थापक के रूप में चलाने के बिना विज़ुअल स्टूडियो 2013 के साथ स्थानीय डीबगिंग को भी सक्षम करता है । डिफ़ॉल्ट रूप से, IIS एक्सप्रेस केवल लोकलहोस्ट को बांधता है जब गैर-ऊंचा हो जाता है; यह host.ames जैसे sub.localtest.me के पर्यायवाची नहीं होगा ।
class SubdomainRoute : Route
{
public SubdomainRoute(string url) : base(url, new MvcRouteHandler()) {}
public override RouteData GetRouteData(HttpContextBase httpContext)
{
var routeData = base.GetRouteData(httpContext);
if (routeData == null) return null; // Only look at the subdomain if this route matches in the first place.
string subdomain = httpContext.Request.Params["subdomain"]; // A subdomain specified as a query parameter takes precedence over the hostname.
if (subdomain == null) {
string host = httpContext.Request.Headers["Host"];
int index = host.IndexOf('.');
if (index >= 0)
subdomain = host.Substring(0, index);
}
if (subdomain != null)
routeData.Values["subdomain"] = subdomain;
return routeData;
}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
object subdomainParam = requestContext.HttpContext.Request.Params["subdomain"];
if (subdomainParam != null)
values["subdomain"] = subdomainParam;
return base.GetVirtualPath(requestContext, values);
}
}
सुविधा के लिए, MapSubdomainRoute
अपनी RegisterRoutes
विधि से निम्न विधि को उसी तरह कॉल करें जैसे आप पुराने को करेंगे MapRoute
:
static void MapSubdomainRoute(this RouteCollection routes, string name, string url, object defaults = null, object constraints = null)
{
routes.Add(name, new SubdomainRoute(url) {
Defaults = new RouteValueDictionary(defaults),
Constraints = new RouteValueDictionary(constraints),
DataTokens = new RouteValueDictionary()
});
}
अंत में, आसानी से उपडोमेन (या तो एक सच्चे उपडोमेन या एक क्वेरी पैरामीटर से) का उपयोग कर सकते हैं, यह इस Subdomain
संपत्ति के साथ एक नियंत्रक आधार वर्ग बनाने में सहायक है :
protected string Subdomain
{
get { return (string)Request.RequestContext.RouteData.Values["subdomain"]; }
}