mvc中调用动作方法的歧义

时间:2014-10-15 09:48:02

标签: c# asp.net-mvc routing

我正在创建一个示例mvc应用程序,并在Home控制器中创建了两个操作方法(索引)。

public class HomeController : Controller
{
    //
    // GET: /Home/        
    public string Index()
    {
        return Index1();
    }

    public string Index(string message)
    {
        return "hello";
    }
}

并且索引被设置为运行应用程序的默认操作。在运行应用程序时,我得到以下错误,

  

当前的行动请求'索引'在控制器类型上   ' HomeController的'以下操作方法之间不明确:   System.String索引(Int32)类型   Mvc4example.Controllers.HomeController System.String   Mvc4example.Controllers.HomeController类型的索引(System.String)

我所期望的是,如果没有查询字符串,它将调用无参数操作方法,如果传递了查询字符串消息,则会调用带参数的操作方法。

任何人都可以解释为什么会出现这种情况吗?

3 个答案:

答案 0 :(得分:1)

如果您有两个具有相同名称的方法,则Http请求属性必须不同

public class HomeController : Controller
{
    [HttpGet]        
    public string Index()
    {
        //...
    }

    [HttpPost]
    public string Index(string message)
    {
        //...
    }
}

答案 1 :(得分:0)

你有第三个这样的行动

    public string Index(int id)
    {
            return "int";       
    }

会解释这种行为

当然,您也不需要无参数操作,这只是消息为空的特殊情况,消息为空

答案 2 :(得分:0)

请查看帖子中的答案:Routing: The current request for action [...] is ambiguous between the following action methods了解更多详情,但总结一下:

  

您最多只能有2个具有相同名称的操作方法   一个控制器,为了做到这一点必须是[HttpPost],并且   其他必须是[HttpGet]。

     

由于你的两个方法都是GET,你应该重命名其中一个   动作方法或将其移动到不同的控制器