代码之家  ›  专栏  ›  技术社区  ›  Davide Vosti

ASP.NET MVC预览5路由模糊性

  •  1
  • Davide Vosti  · 技术社区  · 16 年前

    我对ASP.NET MVC预览版5的示例路由有问题。

    在AccountController中,我有两个操作:

    public ActionResult Delete()  
    public ActionResult Delete(string username)
    

    在尝试查找帐户/删除或帐户/删除时?username=davide ControllerActionInvoker抛出一个异常,表示删除请求在我的两个操作方法之间不明确。

    global.asax中的默认路由尚未更改。

    动作调用程序不应该理解在参数列表中调用的方法是什么?

    使用预览4,我在执行相同的操作时没有遇到这种问题。

    有什么想法吗?

    4 回复  |  直到 16 年前
        1
  •  3
  •   Davide Vosti    16 年前

    找到解决方案!

    随着actionnameattribute的引入,现在需要根据请求手动筛选要调用的方法。这是由actionselectionattribute完成的。

    完整解释如下: http://haacked.com/archive/2008/08/29/how-a-method-becomes-an-action.aspx

        2
  •  0
  •   berko    16 年前

    我不能确定为什么会这样。但是,您可能只需要考虑执行delete(string username)操作并删除参数,而不需要重载。

    因为字符串可以为空,我的理解是,简单地调用account/delete将使用一个空用户名参数来调用该操作,然后可以在action方法的开头对该参数进行测试。

        3
  •  0
  •   crucible    16 年前

    我所做的是放弃空白删除(),只使用删除(字符串用户名)

    在你的URL路由中,你会有类似于“/控制器/操作/用户名/”? 如果你有“/控制器/操作/ID/”你最好删除(字符串ID),这样只需使用URL来处理这个“/帐户/删除/大卫”

    也就是说,使用默认路由,它应该类似于默认ID

    然后在您的delete(string id)方法中有:

    public ActionResult Delete(string id)
    {
        if(string.IsNullOrEmpty(id)) return EmptyID();
    
        // Continue normal Delete method
    }
    
    public ActionResult EmptyID()
    {
        // The method you were going to have on a blank delete.
    }
    

    或者用if else的一个方法将其包装起来。

    不管怎样,我只需要使用一个方法,在一个空字符串的路由中对您的用户名/i d进行默认设置,然后以这种方式处理它。

    如果您想进一步了解我的意思或任何有帮助的信息,请在我的信息页面上的andrew@my domain与我联系。

    编辑:啊,不管怎么说,伯克所说的,我不知道命名属性会有什么帮助——所以请在这里发表评论,详细介绍给其他发现相同问题的人!:)

        4
  •  0
  •   Aristotle Ucab    16 年前

    它不明确,因为两个控制器操作是相同的post方法。 您只能在表单发布场景中使用它,例如,您提交的表单数据使用HTTP Post。