2015-02-02 1 views
0

MVC 4 Web API를 사용하고 있으며 웹 페이지에서 코드를 렌더링하기 위해 클라이언트가 사용할 수있는 끝점을 표시해야한다는 요구 사항이 있습니다. 위의 라인이 웹 페이지에 포함 된이서버에서 자바 스크립트 코드를 동적으로 생성 - MVC 4

<script type="text/javascript" src="http://server/endpoint"/> 

같은 뭔가 서버가 자동으로 실행되어야하는 자바 스크립트 코드를 반환해야합니다.

예를 들어 서버가 alert('hello') 코드를 반환하면 클라이언트 웹 페이지 (스크립트 사용)가 자동으로 "hello"를 표시합니다.

서버 측 코드는 다음과 같을 수 있습니다. 이 경우 서버는 javacript 코드를 반환하여 브라우저에 테이블을 작성합니다. 기본적으로 이것은 대학의 특정 교수를위한 출판물 목록을 반환하는 데 사용됩니다. 개인이 웹 페이지에 자신의 간행물을 보여주기 위해 스크립트를 포함 할 수 있도록 enpoint가 노출되어 있습니다.

// GET api/values/5 
     public string Get(int id) 
     { 

      var html = "<table><tbody>"; 
      html += "<tr>"; 
      html += "<td>row 1, col 1</td>"; 
      html += "<td>row 1, col 2</td>"; 
      html += "</tr>"; 
      html += "<tr>"; 
      html += "<td>row 2, col 1</td>"; 
      html += "<td>row 2, col 2</td>"; 
      html += "</tr>"; 
      html += "</tbody></table>"; 
      var script = string.Format(@"<script type='text/javascript'>document.write('{0}')</script>", html); 
      return script; 
     } 

어떻게 생각하십니까? Response.Write("alert('hello')")을 사용해 보았지만 작동하지 않습니다.

+0

[HttpHandler] (https://support.microsoft.com/kb/308001)를 사용 해본 적이 있습니까? – Richard

답변

0

1 - 스크립트 태그에서 끝점을 사용하는 경우 get 메소드에서 스크립트 태그를 다시 작성할 필요가 없습니다.

2 - 반환하려는 코드는 자바 스크립트 코드가 아니며 html 코드이며 스크립트 태그가 호출되면 실행되지 않습니다.

3 -이 작업을 수행하려고 :

HTML :

<script type="text/javascript" src="http://server/endpoint"/> 

webAPI :

public string Get(int id) 
{ 
    return "alert('hello world');"; 
} 
+0

효과가 있습니까? 내 끝점은 - http : // localhost : 49209 /입니다. 나는 요청을 엔드 포인트에 올릴 때 ajax를 얻고 $ .get ('/ api/values ​​/ 5') 문자열을 반환하고 "alert ('hello')"; 이것은 HTML 문자열 대신 자바 스크립트 코드로 처리됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? –

+0

내 예제처럼 해봤습니까? 내 예제에서는 아약스 호출을 사용하지 않고 script_s 태그 src에 끝점을 사용하고 있습니다. 당신이 그 질문에서 물었던 것처럼. –

0

가 나는 REST 엔드 포인트와 함께 WCF 서비스를 사용하고, 내 스크립트도했다 큰 따옴표 사이에 인용 부호가있는 문자열로 처리됩니다.

"alert('hello world');" 대신 alert('hello world');

의 내가 발견 여기에 솔루션 :

: 당신은 application/x-javascript에 대한 응답의 내용 유형을 설정하고 다음과 같이 MemoryStream을 내부에 문자열을 마무리해야 https://viswaug.wordpress.com/2008/05/22/customizing-the-response-serialization-in-wcf-rest-services/

public Stream GetSomeScript() 
{ 
    WebOperationContext context = WebOperationContext.Current; 
    context.OutgoingResponse.ContentType = "application/x-javascript"; 

    const string TEXT_TO_SEND = "alert('hello world');"; 

    MemoryStream ms = new MemoryStream(); 
    StreamWriter sw = new StreamWriter(ms); 
    sw.Write(TEXT_TO_SEND); 
    sw.Flush(); 
    ms.Position = 0; 
    return ms; 
} 

희망이 도움이됩니다.