2017-02-16 44 views
1

有3级属性的路由目前的要求是不明确的MVC属性路线

[Route("{foo}_{bar}_{fee}_o_p")] ActionResult SelectFee
[Route("{foo}_{bar}_{fee}_{fii}_o_p")]ActionResult SelectFii
[Route("{foo}_{bar}_{fee}_{fii}_{fum}_o_p")]ActionResult SelectFum

如预期前2个工作。 但最后一个出现了一个模棱两可的反射错误。

这也是奇怪的,如果我是他们的2出移动到另一个区域/控制器为他们暧昧的错误出现,以及 如果我升级到 [Route("Select/{foo}_{bar}_{fee}_{fii}_{fum}_o_p")]ActionResult SelectFum 它的作品...

路线是
public ActionResult SelectFee(string foo, string bar, string fee)
public ActionResult SelectFii(string foo, string bar, string fee, string fii)
public ActionResult SelectFum(string foo, string bar, string fee, string fii, string fum)

从ELMAH确切的错误 System.Reflection.AmbiguousMatchException:当前请求在以下操作方法之间不明确:
System.Web.Mvc.ActionResult类型为RexProject.Controllers.ShopController的SelectedFee(System.String,System.String,System.String)
System.Web.Mvc.ActionResult在类型RexProject.Controllers.ShopController上的SelectFii(System.String,System.String,System.String,System.String)
System.Web.Mvc.ActionResult SelectFum(System.String,System。字符串,System.String,System.String,System.String)类型RexProject.Controllers.ShopController

任何输入将有所帮助! 谢谢!

解决方案(或变通方法)
删除了属性路由,并将它们放置在RouteConfig的RegisterRoutes方法中,Longest First,它们按预期工作。

+0

所有3条路径都是相同的 - 它们指定url只包含一个段。 –

+0

显示您的完整操作签名。如果最后一个参数是可以为空的,那就是你得到那个错误的原因 –

回答

0

如果这是一个标准的get,那么就不需要自定义路由,绑定将自动从querystring中完成,好像你只是想改变url格式,我不确定你获得了什么从中。

public ActionResult SelectFum(string foo = null, string bar = null, string fee = null, string fii = null, string fum = null) 
{ 
    //your code 
} 
+0

但是这对SEO没有帮助 – juanvan

相关问题