2010-03-11 3 views
21

기본 페이지가 디스크의 실제 파일 인 index.html이어야하는 ASP.NET MVC 응용 프로그램이 있습니다.ASP.NET MVC가 기본 문서를 제공하지 않습니다.

나는 그래서이 제공됩니다 알고 존재하지만 내가 사용하는 경우 www.mydomain.com 내가 보장 가지고 404

을 얻을 www.mydomain.com/index.html 사용하여 파일을 검색 할 수 있습니다 기본 문서가 IIS7에 올바르게 설정되어 있고 global.asax에 정의 된 모든 경로를 주석 처리하여이 문제의 원인이되는 경로가 없는지 확인했습니다.

그래서 요약 :

  • 나는 디스크에있는 index.html 파일을 가지고 IIS7이 기본 문서로 index.html을 사용하도록 설정되어 있습니다.
  • ASP.NET MVC 응용 프로그램을 제거하고 index.html 파일을 그대로두면 기본 문서가 예상대로 제공됩니다.
  • ASP.NET MVC 응용 프로그램을 게시하면 index.html이 기본 문서로 제공되지 않습니다.

누구든지 기본 문서를 제공하기 위해 ASP.NET MVC를 얻는 방법을 알고 있습니까?

+0

아마도 serverfault.com에서 더 나은 응답을 얻을 수 있습니다. – tzenes

+0

이것은 IIS7 문제가 아니며 ASP.NET MVC 문제입니다. ASP.NET MVC를 사용하지 않을 때 기본 문서가 완벽하게 제공됩니다. –

+0

실제로이 작업을 수행해야하는 이유가 실제로 혼동 스럽습니다. –

답변

-3

mvc 프레임 워크에서 해당 확장을 알 수 없으므로 index.html을 직접 추가했다고 판단됩니다.

mvc의 기본 색인 페이지는 // domain/home/index이고 실제로 index.aspx입니다.

// 도메인을 사용하여 도메인을 호출하면 라우팅 엔진은 /home/index.aspx가 아닌 index.html을 사용합니다.

+0

라우팅 엔진은 홈 컨트롤러의 인덱스 동작으로 라우팅되지 않습니다. 왜냐하면 내가 말한 것처럼 global.asax의 모든 경로를 주석 처리했기 때문입니다. 디스크에 index.html 파일이 있고 IIS7이 기본 문서로 index.html을 사용하도록 설정되어 있지만 ASP.NET MVC가이를 방지합니다 –

2

이 문제를 해결할 방법을 찾았습니다. 당신이 (컨트롤러/모델 /보기/APPDATA 등 폴더 즉 next)을 MVC 응용 프로그램의 루트에 있어야 index.html을하려는 경우, 당신은이 작업을 수행 할 수 있습니다

당신이 home.html, aboutus.htmlcontactus.html을 말해봐.

//this route matches (http://mydomain.com/somekindofstring) 

routes.MapRoute(
    "SingleRootArg", 
    "{id}", 
    new { controller = "Home", action = "Details", id=""}); 

// so now that you have your route for all those random strings. 
// I had to do this for vanity urls. mydomain.com/ronburgandy etc. however, 
// mydomain.com/index.html will also come in just how you'd expect. 

//Just an example of what you COULD do. the user would see it as root html. 

Public ActionResult Details(string id) 
{ 

    //let me save you the trouble - favicon really comes in as a string *ANGER* 
    if(String.IsNullOrEmpty(id) || id.ToLower().Contains("favicon.ico")) 
     return Redirect("~/index.html"); 
    if(id == "aboutus.html") 
     return Redirect("~/aboutus.html"); 
    if(id == "contactus.html") 
     return Redirect("~/contactus.html"); 
    if(id == "index.html") 
     return Redirect("~/index.html"); 
} 

index.htmlaboutus.htmlindex.html 내 CSPROJ 파일과 같은 수준에서 지금이다.

1

MVC 응용 프로그램에서 경로를 무시하고 IIS가이를 처리하도록 할 수 있습니다.

routes.IgnoreRoute("index.html") 
etc 
+3

불행히도 사용자가이기 때문에 "기본 문서"에 대해이 기능이 작동하지 않습니다. index.html을 주소에 입력하지 마십시오. index.html로 바로 가면이 방법이 효과적입니다. – mkchandler

+0

@ mc2thaH IIS의 "기본 문서"설정을 default.aspx에서 index.html로 변경해야합니다. OP는 그가 이것을했다고 말했다. – tarn

+1

mkchandler가 맞습니다. 기본 문서 세트를 사용해도 작동하지 않았습니다. 대신 라우트를 추가해야했습니다 .IgnoreRoute ("") – pius

2

WebForms 응용 프로그램과 비슷한 문제가있었습니다. web.config에서 system.webServer 아래의 StaticFile 핸들러의 resourceType 속성이 Either로 설정되어 있는지 확인하십시오.

<add name="StaticFile" path="*" verb="*" type="" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" scriptProcessor="" resourceType="Either" ... 
+0

'routes.IgnoreRoute ("");'메소드가 작동하지 않았습니다. 이것은했다. 감사. –

+0

Orchard와 함께 기본 문서 작업을 수행 할 수있었습니다. DefaultDocumentModule을 추가하고 resourceType = "Either"를 갖는 것이 핵심입니다. 라우팅은 다음을 찾습니다. "StaticFile"path = "*"동사 = "*"모듈 = "StaticFileModule, DefaultDocumentModule"preCondition = "integratedMode"resourceType = ""requireAccess = "Read"/> – James

27

ASP.Net MVC 라우팅은 Global.asax/Global.asax.cs 파일에 의해 제어됩니다. 즉시 사용 가능한 라우팅은 다음과 같습니다.

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 
} 

경로가 지정되지 않은 경우, 즉. www.domain.tld/이면 경로는 빈 문자열 ""입니다. 따라서 라우팅은 해당 이름의 컨트롤러를 찾습니다. 즉, 이름이없는 컨트롤러를 전혀 찾지 않습니다. 그런 컨트롤러가 발견되지 않으면 404 NOT FOUND 오류 페이지를 처리합니다.'이 미라 부활에 대한

routes.IgnoreRoute(""); 
+0

" 컨트롤러라는 이름을 가지고 있습니다. 즉, 이름이 전혀없는 컨트롤러를 찾습니다. " - 사실, 홈/인덱스를 찾고 있습니다 - 그것들은 MapRoute 호출의 매개 변수 기본값입니다 –

2

죄송합니다,하지만 난 돈 :

문제를 해결하거나 의미 또는 완전히 다른 그 길을 무시 뭔가 그 경로지도, index.html 파일 제어를 통해 전달하려면 이 문제가 기본 문서 문제라고 생각하지 마십시오. 실제로 다른 응답자가 말한대로 기본 문서 세트를 갖고 싶지 않을 수도 있습니다.

이와 유사한 문제가 있습니다. 내 문제의 원인은 사이트의 응용 프로그램 풀이 .NET Framework v2를 사용하도록 설정되었으며 v4로 설정되어 있어야했기 때문입니다. 일단 내가 바꿨다면 바르게 로딩되었다.

관련 문제