我有一个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" }
);
}
我缺少什么?
以下是我在调试模式下遇到的实际错误:
路径控制器&#39; /vdo/small.mp4'未找到或未实现IController。
答案 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
来访问它。