MVC3 웹 사이트를 만들려고합니다. 최소한 두 개의 영역이 필요하지만 각 영역마다 다른 URL이 필요합니다. 이처럼 :mvc3 영역에 호스트 이름이 있습니다.
domain.com/ 간다 admin.domain.com/는
anotherSite.com/가/지역/포털로 이동/지역/관리로 이동/
에
몇 가지 조사를 수행 한 후 나는 다음과 같이 HostNameContraint를 사용할 수 Lucero's link을 발견했다 :
public class HostNameContraint : IRouteConstraint
{
protected string _hostname;
public HostNameContraint(string hostname)
{
_hostname = hostname;
}
bool IRouteConstraint.Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
if (httpContext.Request.Url.Host == _hostname)
return true;
return false;
}
}
이 같은
후 등록 제약은 : 그들은 각각의 사이트에 응용 프로그램의 루트 폴더를 가리 키도록
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { area = "", controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new { hostname = new HostNameContraint("domain.com") },
new[] { "MVCProject.Controllers" }
);
routes.MapRoute(
"Admin_Default2", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { area = "Admin", controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new { hostname = new HostNameContraint("admin.domain.com") },
new[] { "MVCProject.Controllers.Areas.Admin.Controllers" }
);
routes.MapRoute(
"Portal_Default2", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { area = "Portal", controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new { hostname = new HostNameContraint("anotherSite.com") },
new[] { "MVCProject.Controllers.Areas.Portal.Controllers" }
);
나는 IIS 설정을 가지고있다. "Domain.com"루트가 올바르게 작동하지만 "Admin.domain.com"또는 "Domain.com/admin/"으로 이동하면 404 "리소스를 찾을 수 없습니다."라는 메시지가 나타납니다.
업데이트 나는 URL의 시작 부분과 끝 부분에 모두 영역 이름을 사용하여 시도했다. 은 "포털"영역이 경로에있을 때
"포털/{컨트롤러}/{동작}/{ID}는"
이 문제는, 서명은 이름과 일치하지 않는 것을 "anotherSite.com"따라서 다시 와서 403.14 - 금지 말한다. 이 디렉토리의 내용을 나열 할 수 없습니다. 또한 "Portal"영역이 url 매개 변수 일 때 HostNameConstraint의 생성자가 호출되지 않는다는 점에 유의해야합니다.
예 처음에는 Area 이름과 함께 Area name을 사용하여 시도했습니다. IE "Portal/{controller}/{action}/{id}", // 매개 변수가있는 URL 문제는 "Portal"영역이 경로에있을 때 "anotherSite.com" "Portal"영역을 직접 가리켜 야하므로 "anotherSite.com"은 "Portal/{controller}/{action}/{id}"와 일치하지 않습니다. // 매개 변수 ' –