programing

인코딩이 없는 ASP.NET MVC 레이저 렌더

showcode 2023. 5. 25. 22:15
반응형

인코딩이 없는 ASP.NET MVC 레이저 렌더

레이저는 기본적으로 문자열을 인코딩합니다.인코딩 없이 렌더링하기 위한 특별한 구문이 있습니까?

ASP.NET MVC 3부터는 다음을 사용할 수 있습니다.

@Html.Raw(myString)
@(new HtmlString(myString))

이미 언급된 @Html 뿐만 아니라.원시(문자열) 접근 방식입니다. MvcHtmlString을 출력하면 인코딩되지 않습니다.이 기능은 Html 도우미에 사용자 고유의 확장자를 추가하거나 html을 포함할 수 있는 뷰 모델의 값을 반환할 때 유용합니다.

예를 들어, 뷰 모델이 다음과 같다면,

public class SampleViewModel
{
  public string SampleString { get; set; }
  public MvcHtmlString SampleHtmlString { get; set; }
}

Core 1.0+(및 MVC 5+)의 경우 HtmlString 사용

public class SampleViewModel
{
  public string SampleString { get; set; }
  public HtmlString SampleHtmlString { get; set; }
}

그리고나서

<!-- this will be encoded -->
<div>@Model.SampleString</div>
<!-- this will not be encoded -->
<div>@Html.Raw(Model.SampleString)</div>
<!-- this will not be encoded either -->
<div>@Model.SampleHtmlString</div>

사용하다@Html.Raw()인코딩 및 보안 문제가 더 많이 발생할 수 있으므로 주의해야 합니다.제가 직접 해야 했기 때문에 사용 사례를 이해하지만, 조심스럽게...모든 텍스트를 허용하지 마십시오.예를 들어 특정 문자 시퀀스만 보존/변환하고 나머지는 항상 인코딩합니다.

@Html.Raw(Html.Encode(myString).Replace("\n", "<br/>"))

그러면 잠재적인 보안 취약점을 만들지 않았으며 모든 브라우저에서 특수/외국어 문자가 올바르게 표시됩니다.

ActionLink의 경우 일반적으로 HttpUtility를 사용합니다.링크 텍스트를 인코딩합니다.그런 경우에는 사용할 수 있습니다.HttpUtility.HtmlDecode(myString)HtmlActionLink를 사용하여 전달하고자 하는 문자열을 디코딩할 때 작동했습니다.예:

  @Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)

WriteLiteral 메서드를 사용할 수도 있습니다.

언급URL : https://stackoverflow.com/questions/4071602/asp-net-mvc-razor-render-without-encoding

반응형