无法在MVC应用中找到注册路线。缺什么?

时间:2015-12-09 17:47:37

标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-web-api2

我有一个MVC 4应用程序。我添加了一个简单的控制器Get方法,我试图调用。我尝试加载页面时总是收到404错误。

调用该方法的HTML页面 - demo.html 页面:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title></head>
<body>
    <video width="480" height="320" controls="controls" autoplay="autoplay">
        <source src="/vdo/?id=small.mp4" type="video/mp4" />
    </video>
</body>
</html>

控制器:

public class VdoController : ApiController
{

    [AllowAnonymous]
    public HttpResponseMessage Get(string id)
    {
        if (id == null)
            return new HttpResponseMessage(HttpStatusCode.BadRequest);
        .....

        HttpResponseMessage resp = Request.CreateResponse(HttpStatusCode.PartialContent);
        .....

        return resp;
    }         
}

路线注册:

public override void RegisterArea(AreaRegistrationContext context)
{
      context.MapRoute(
                "Vdo",
                "vdo/{id}",
                new { controller = "Vdo" },
                new string[] { "<Namespace>.Controllers" }
            );    
}

我缺少什么?

以下是我在浏览器中看到的内容: enter image description here

以下是我在调试模式下遇到的实际错误:

路径控制器&#39; /vdo/small.mp4'未找到或未实现IController。

2 个答案:

答案 0 :(得分:0)

当我们使用路由时,我们不需要使用查询字符串来传递网址中的数据。我认为你的问题在你的网址中,你写的路线规则如下 - vdo/{id}但是您要使用查询字符串请求控制器功能,您应该将您的网址从/vdo/small.mp4更改为 - /vdo/?id=small.mp4 我认为这将解决你的问题。

答案 1 :(得分:0)

我相信您需要将默认操作映射到Get

  public override void RegisterArea(AreaRegistrationContext context)
    {
          context.MapRoute(
                    "Vdo",
                    "vdo/{id}",
                    new { controller = "Vdo", action = "Get" },
                    new string[] { "<Namespace>.Controllers" }
                );    
    }

然后您可以使用/vdo/small.mp4来访问它。