करने के लिए कब्जा उपडोमेन जबकि मानक MVC5 मार्ग को बनाए रखना सुविधाओं, निम्नलिखित SubdomainRoute
वर्ग Route
से प्राप्त का उपयोग करें।
साथ ही, SubdomainRoute
उपडोमेन वैकल्पिक रूप से एक क्वेरी पैरामीटर, बनाने sub.example.com/foo/bar
और example.com/foo/bar?subdomain=sub
समकक्ष के रूप में निर्दिष्ट करने की अनुमति देता है। इससे आपको DNS सबडोमेन कॉन्फ़िगर किए जाने से पहले परीक्षण करने की अनुमति मिलती है। क्वेरी पैरामीटर (उपयोग में होने पर) Url.Action
, आदि द्वारा उत्पन्न नए लिंक के माध्यम से प्रचारित किया जाता है।
क्वेरी पैरामीटर विजुअल स्टूडियो 2013 के साथ configure with netsh or run as Administrator के बिना स्थानीय डिबगिंग को भी सक्षम बनाता है। डिफ़ॉल्ट रूप से, आईआईएस एक्सप्रेस केवल लोकलहोस्ट तक सीमित नहीं होता है जब गैर-ऊंचा हो; यह समानार्थी होस्टनामों से 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);
}
}
सुविधा के लिए, अपने RegisterRoutes
विधि से निम्नलिखित MapSubdomainRoute
विधि कॉल बस के रूप में आप के सादे पुराने 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"]; }
}
मैंने बहु-किरायेदार अनुप्रयोगों के लिए एक समान प्रकार की चीज लागू की, लेकिन कस्टम रूट क्लास के बजाय एक सार आधार नियंत्रक का उपयोग करना। इस पर मेरा ब्लॉग पोस्ट है [यहां] (http://lukesampson.com/post/303245177/subdomains-for-a-single-plication-with-asp-net-mvc)। –
इस दृष्टिकोण पर विचार करना सुनिश्चित करें: [http://blog.tonywilliams.me.uk/asp-net-mvc-2-routing-subdomains-to-areas ](http://blog.tonywilliams.me.uk/ एएसपी-नेट-एमवीसी -2-रूटिंग-सबडोमेन-टू-एरिया) मैंने पाया कि यह मेरे ऐप में अन्य उत्तरों की तुलना में बहुतायत को पेश करने के लिए बेहतर होगा, क्योंकि एमवीसी क्षेत्र किरायेदार-विशिष्ट नियंत्रकों और विचारों को पेश करने का एक अच्छा तरीका है संगठित तरीका – trebormf
@trebormf - मुझे लगता है कि आपको इसे एक उत्तर के रूप में जोड़ना चाहिए, यही वह है जो मैंने अपने समाधान के आधार के रूप में उपयोग किया। – Shagglez