剃刀虚拟路径问题

本文关键字:问题 路径 虚拟 剃刀 | 更新日期: 2023-09-27 18:08:09

控制器为:

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)。但是如果我使用razor视图引擎,则没有captcha图像渲染。

如何修复?

还有一件事:这是显示验证码的好方法吗?

后编辑:<img src=@Href("../../Home/ShowCaptchaImage") /> works fine。问题不是因为razor而是因为在第一个例子中我使用的是Visual Studio Development server而在第二个例子中我使用的是IIS

剃刀虚拟路径问题

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

这会导致浏览器从托管应用程序的HTTP源(方案+域+端口)的根请求/Home/ShowCaptchaImage。你需要映射URL来反映应用程序托管的任何虚拟文件夹之类的东西。如果我没有错,这是你所面临的问题,看看ResolveUrl/ResolveClientUrl等效Asp。净剃须刀吗?(我还没有测试过,但看起来不错)。

同样,您可以使用Firebug或其他浏览器中的等效工具轻松地诊断问题—查看所发出的请求,您将看到浏览器实际请求的内容。