【发布时间】:2016-01-01 22:57:00
【问题描述】:
我在一个名为 Public 的区域内有一个名为 DocumentsController 的控制器。
public class DocumentsController : AsyncController
{
public async Task<ActionResult> DownloadAsync(string fileName)
{
// ...
}
}
在PublicAreaRegistration.cs 文件中,我有以下路由设置:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(null, "Public/Documents/Download/{fileName}",
new { action = "Download", controller = "Documents", area = "Public" });
context.MapRoute(
"Public_default",
"Public/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional, area = "Public" });
}
在一个视图中,我正在像这样调用Url.Action():
<a href="@Url.Action("Download", "Documents", new { area = "Public", fileName = document.FileName })">@document.FileName</a>
但是,尽管 URL 已正确解析 (http://localhost/test/Public/Documents/Download/my-file.pdf),但该操作永远不会被调用。
但是,如果我完全删除第一个 MapRoute 调用,则 url 将解析为 http://localhost/test/Public/Documents/Download?fileName=my-file.pdf,并且按预期调用操作方法。
我做错了什么?
【问题讨论】:
-
你所说的`永远不会被调用。`是什么意思?抛出了什么异常?
-
那么,如果使用默认路由实际上调用了您的操作,为什么需要自定义路由?
-
@jpgrassi 因为我想要一个像
http://localhost/test/Public/Documents/Download/my-file.pdf这样的干净网址而不是http://localhost/test/Public/Documents/Download?fileName=my-file.pdf -
检查我的答案,我想我发现您的自定义路线有什么问题。
标签: c# asp.net asp.net-mvc asp.net-mvc-4