가상 디렉토리의 ASP.NET MVC
-
06-07-2019 - |
문제
Global.asax.cs에 다음과 같습니다
routes.MapRoute(
"Arrival",
"{partnerID}",
new { controller = "Search", action = "Index", partnerID="1000" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
내 SearchController는 다음과 같습니다
public class SearchController : Controller
{
// Display search results
public ActionResult Index(int partnerID)
{
ViewData["partnerID"] = partnerID;
return View();
}
}
그리고 index.aspx는 현재 단순히 ViewData [ "PartnerId"]를 보여줍니다.
Windows XP에서 Test라는 IIS에 가상 디렉토리가 설정되어 있습니다.
내 브라우저를 가리키면 http : // localhost/test/ 그런 다음 예상대로 1000을 표시합니다. 그러나 내가 시도하면 http : // localhost/test/1000 페이지가 발견되지 않은 오류가 발생합니다. 어떤 아이디어?
가상 디렉토리에서 MVC 실행에 대한 특별한 고려 사항이 있습니까?
해결책
IIS 5.1은 URL을 해석하여 테스트라는 폴더에서 1000이라는 폴더를 찾고 있습니다. 왜 이렇게이다?
IIS 6은 ASPNET_ISAPI.DLL (ASP.NET을 호출하는 C/C ++ ISAPI 필터)에 맵핑 된 URL에서 "Filename Extension"을 볼 때 ASP.NET을 호출하기 때문에 발생합니다. 라우팅은 urlroutingModule이라는 .NET IHTTPMODULE이므로 ASP.NET 자체가 호출되지 않으면 호출되지 않습니다. ASPNET_ISAPI.DLL이 호출 될 때만 발생합니다. URL에 .aspx가있을 때만 발생합니다. 따라서, .aspx, urlroutingModule이 없으므로 404.
가장 쉬운 솔루션은 다음과 같습니다.
URL에 .aspx가 마음에 들지 않으면 라우팅 구성을 살펴보고 각 패턴의 전진 슬래시 전에 .aspx를 추가하십시오. 예를 들어 {controller} .aspx/{action}/{id} 또는 myapp.aspx/{controller}/{action}/{id}를 사용하십시오. 컨트롤러 이름의 일부가 아니기 때문에 .aspx를 Curly -Bracket 매개 변수 이름이나 '기본'값에 넣지 마십시오. IIS를 만족시키는 URL에 있습니다.
원천: http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-spnet-mvc-to-6/
다른 팁
Windows XP 에서이 작업을 수행하는 경우 IIS 5.1을 사용하고 있습니다. 요청을 처리하려면 ASP.NET을 가져와야합니다. 경로 ({컨트롤러} .mvc/{action}/{id})에 확장자를 추가하고 ASP.NET으로 확장하거나 모든 요청을 ASP.NET에 매핑해야합니다. 그만큼 http : // localhost/test MVC 프로젝트에서 특별히 처리되는 Default.aspx로 이동하기 때문에 작동합니다.
또한 지정해야합니다 http : // localhost/test/search/index/1000. ID를 지정하려면 컨트롤러 및 액션 조각이 선택 사항이 아닙니다.
응용 프로그램에서 가상 디렉토리를 사용할 때 여러 가지 고려 사항이 있습니다.
하나는 앱이 동일한 서버에 상주하더라도 대부분의 브라우저는 한 가상 디렉토리에서 다른 디렉토리로 쿠키를 제출하지 않는다는 것입니다.
가상 경로 설정 : MVC 프로젝트, 속성, 웹 탭을 마우스 오른쪽 버튼으로 클릭하십시오. 적절한 위치가 입력됩니다.