我有两个动作:
//行动1 public FileResult Download(string folder,string fileName){...}
//行动2 public FileResult Download(int id,string fileName){...}
当我尝试下载以下网址时 http://localhost:54630/Downloads/Download/15?fileName=sharedhostinggsg.pdf
发生错误: 控制器类型“DownloadsController”上的当前动作“下载”请求在以下操作方法之间不明确: System.Web.Mvc.FileResult在SextaIgreja.Web.Controllers.DownloadsController类型下载(Int32) System.Web.Mvc.FileResult类型SextaIgreja.Web.Controllers.DownloadsController下载(System.String,System.String)
我该如何制作:
网址:../ Downloads / Download / 15?fileName = sharedhostinggsg.pdf 行动:行动2
网址:../ Downloads?folder = Documentos $ fileName = xxx.docx 行动:行动1
我试图对我的路线施加约束,但没有效果:
routes.MapRoute(
"Download", // Route name
"Downloads/Download/{id}", // URL with parameters
new { controller = "Downloads", action = "Download" }, // Parameter defaults
new { id = @"\d+" }
);
在互联网上搜索我找到了几个链接,但我无法理解如何解决我的问题。例如,This找不到RequireRequestValue属性。我不知道它是哪个命名空间。
答案 0 :(得分:3)
您提到的RequireRequestValue是他们创建的自定义类(来自Example posted),因此您无法在任何Microsoft名称空间中找到它。
您将看到的类继承自ActionMethodSelectorAttribute。此属性类可用于帮助过滤操作,就像AcceptVerbs属性一样。因此,在该链接的示例中,它们返回true或false,具体取决于路由参数中是否指定了值。
因此,根据您发布的示例,创建一个名为RequireRequestValueAttribute的类。然后装饰你的两个下载动作方法,如下所示:
[RequireRequestValue("id")]
public FileResult Download(int id, string fileName) { ... }
[RequireRequestValue("folder")]
public FileResult Download(string folder, string fileName) { ... }