폴더 .html
에있는 정적 파일 을 요청할 수 있기를 원합니다 ~/Views
. 설명서에 따르면 라우팅 시스템은 응용 프로그램의 경로를 평가하기 전에 URL이 디스크 파일과 일치하는지 확인합니다.
그러나 파일을 요청하면 404
오류가 발생합니다.
내 파일은 ~ / Views 폴더에 있습니다. URL은 다음과 같습니다.http://[localhost]/Views/HtmlPage1.html
내가 무엇을 놓쳤습니까?
폴더 .html
에있는 정적 파일 을 요청할 수 있기를 원합니다 ~/Views
. 설명서에 따르면 라우팅 시스템은 응용 프로그램의 경로를 평가하기 전에 URL이 디스크 파일과 일치하는지 확인합니다.
그러나 파일을 요청하면 404
오류가 발생합니다.
내 파일은 ~ / Views 폴더에 있습니다. URL은 다음과 같습니다.http://[localhost]/Views/HtmlPage1.html
내가 무엇을 놓쳤습니까?
답변:
'~ / Views'폴더에있는 정적 .html 파일을 요청할 수 있기를 원합니다.
당신은 할 수 없습니다. 이 폴더에는 모든 파일에 대한 액세스를 명시 적으로 금지하는 web.config 파일이 있습니다. 클라이언트에서 파일에 액세스하려면 해당 파일 Views
을 ASP.NET MVC에서 특별한 의미가있는 폴더에 두지 않아야합니다 .
~/Static
HTML 파일을 저장할 수 있는 폴더가있을 수 있습니다. 그리고 다음과 같이 액세스하십시오.
http://example.com/yourapplicationname/static/foo.html
Views 폴더에서 js 및 html과 같은 파일을 허용하려면 views-Folder에서 web.config를 편집하십시오.
<system.webServer>
<handlers>
<add name="JavaScriptHandler" path="*.js" verb="*"
preCondition="integratedMode" type="System.Web.StaticFileHandler" />
<add name="HtmlScriptHandler" path="*.html" verb="*"
preCondition="integratedMode" type="System.Web.StaticFileHandler" />
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
~ / Views 폴더에있는 정적 .html 파일을 요청할 수 있기를 원합니다.
당신은 할 수 있습니다. 표시된 답변은 해결책을 제공하지만 완전히 정확하지는 않습니다.
표시된 답변의 이유는 정확합니다. Views 폴더의 web.config (특정 BlockViewHandler 설정)로 인해 파일에 직접 액세스 할 수 없습니다. Asp.Net MVC에서 뷰를 보호하기 위해 있습니다. 그러나 이러한 파일을 직접 제공하는 것에 대한 질문을했다면 이상한 이름으로보기 폴더를 복제하지 않으려는 AngularJS 부분보기 (이 경우)를 사용하는 것과 같은 유효한 이유가있을 수 있습니다.
따라서 asp.net mvc보기의 보안을 손상시키지 않고 Views 폴더에있는 web.config 파일에서 수행 할 수있는 매우 간단한 조정이 있습니다. 이렇게하면 평소와 같이 .cshtml 파일이 보호되지만 .html 파일은 그대로 둡니다.
이것을 변경
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
--에--
<add name="BlockViewHandler" path="*.cshtml" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
또 다른 대안은 html 파일을 제공하기 위해 원하는 컨트롤러에 액션 메소드를 삽입하는 것입니다.
public ActionResult MyHtml()
{
var result = new FilePathResult("~/Views/HtmlPage1.html", "text/html");
return result;
}
http : // yoursite / controller / MyHtml 로 html에 액세스하십시오 . 이 액션 메서드를 확장하여 html 파일 이름을 method / querystrign 매개 변수로 받아들이고 런타임에 파일을 렌더링 할 수 있습니다.
public ActionResult MyHtml(string htmlPageName)
{
var result = new FilePathResult($"~/Views/{htmlPageName}.html", "text/html");
return result;
}