การจับโดเมนย่อยขณะที่การรักษามาตรฐานการกำหนดเส้นทาง MVC5 คุณสมบัติใช้ต่อไปเรียนมาจากSubdomainRoute
Route
นอกจากนี้ยังSubdomainRoute
อนุญาตให้ระบุโดเมนย่อยแบบเป็นทางเลือกเป็นพารามิเตอร์ข้อความค้นหาสร้างsub.example.com/foo/bar
และexample.com/foo/bar?subdomain=sub
เทียบเท่า สิ่งนี้ช่วยให้คุณทดสอบก่อนที่จะกำหนดค่าโดเมนย่อย DNS พารามิเตอร์การสืบค้น (เมื่อใช้งาน) ถูกเผยแพร่ผ่านลิงค์ใหม่ที่สร้างโดยUrl.Action
ฯลฯ
พารามิเตอร์แบบสอบถามยังช่วยให้การแก้จุดบกพร่องในท้องถิ่นกับ Visual Studio 2013 โดยไม่ต้องกำหนดค่ากับ netsh หรือเรียกใช้ในฐานะผู้ดูแล โดยค่าเริ่มต้น IIS Express จะผูกกับlocalhostเท่านั้นเมื่อไม่มีการยกระดับ มันจะไม่ผูกกับชื่อโฮสต์ที่ตรงกันเช่น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"]; }
}