2011-09-11 3 views
0

컨트롤러는 다음과 같습니다면도기 가상 경로 문제

public class HomeController : Controller 
{ 
    public ActionResult LogOn() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult LogOn(string captcha) 
    { 
     if (captcha == HttpContext.Session["captcha"].ToString()) 
      return Content("ok"); 
     else 
      return Content("failed"); 
    } 

    public CaptchaImageResult ShowCaptchaImage() 
    { 
     return new CaptchaImageResult(); 
    } 
} 

뷰는 다음과 같습니다

<%using (Html.BeginForm()) 
{ %> 
    <p><img src="/Home/ShowCaptchaImage" /></p> 
    <p>Please enter the string as shown above:</p> 
    <p><%= Html.TextBox("captcha")%></p> 
    <p><input type="submit" value="Submit" /></p> 
<% } %> 

모든 것이 음, 보안 문자 이미지를 렌더링 간다 (CaptchaImageResult는 응답 스트림에 JPG를 기록). 그러나 면도기 뷰 엔진을 사용하면 캡쳐 이미지가 렌더링되지 않습니다.

문제를 해결하는 방법은 무엇입니까?

그리고 한 가지 더 : captcha를 표시하는 좋은 방법입니까?

나중에 편집 : <img [email protected]("../../Home/ShowCaptchaImage") />이 정상적으로 작동합니다. 그것은이 브라우저의 루트에서 /Home/ShowCaptchaImage를 요청하는 원인이 있기 때문에 첫 번째 예제에서 나는 비주얼 스튜디오 개발 서버를 사용하고 두 번째에 내가 사용하던 IIS

+0

면도기 뷰 엔진을 사용할 때 반환되는 Html은 무엇입니까? –

답변

0
<img src="/Home/ShowCaptchaImage" /> 

했다 면도칼 때문에 문제는 아니었다 응용 프로그램을 호스트하는 HTTP 출처 (scheme + domain + port)입니다. 앱을 호스팅하는 가상 폴더와 같은 것을 반영하도록 URL을 매핑해야합니다. 잘못된 것이 아니고 문제가 발생한 경우 ResolveUrl/ResolveClientUrl equivalents for Asp.Net Razor?을 살펴보십시오 (테스트하지는 않았지만 좋을 것 같습니다).

또한 Firebug 또는 이와 동등한 도구를 사용하여 다른 브라우저에서 쉽게 문제를 진단 할 수 있습니다. 요청을 확인하면 브라우저에서 실제로 요청한 내용을 볼 수 있습니다.