C# 控制器中的MVC5模糊动作方法

C# 控制器中的MVC5模糊动作方法,c#,controller,polymorphism,asp.net-mvc-5,actionresult,C#,Controller,Polymorphism,Asp.net Mvc 5,Actionresult,我编写了一个C#MVC5互联网应用程序,对同一控制器中的两个ActionResult方法有疑问 我有两种索引ActionResult方法,如下所示: public async Task<ActionResult> Index() public async Task<ActionResult> Index(int? mapCompanyId) 我可以重写代码,这样只有一个索引ActionResult,但如果可能的话,我宁愿有两个索引ActionResult 是否可能有两

我编写了一个C#MVC5互联网应用程序,对同一控制器中的两个ActionResult方法有疑问

我有两种索引ActionResult方法,如下所示:

public async Task<ActionResult> Index()

public async Task<ActionResult> Index(int? mapCompanyId)
我可以重写代码,这样只有一个索引ActionResult,但如果可能的话,我宁愿有两个索引ActionResult


是否可能有两个名称相同的ActionResult,并且根据是否指定了值,执行相关的ActionResult。如果是这样,那么实现起来容易还是不值得花时间?

您可以为操作重载分配不同的HTTP方法,如下所示:

[HttpGet]
public async Task<ActionResult> Index()

[HttpPost]
public async Task<ActionResult> Index(int? mapCompanyId)
[HttpGet]
公共异步任务索引()
[HttpPost]
公共异步任务索引(int?mapCompanyId)

MVC运行时将能够根据请求HTTP方法选择适当的操作。

这是不可能的,因为您正在尝试为每个方法执行
GET
请求。ASP.NET MVC操作选择器不知道选择哪个方法


如果有意义并且您能够使用
HttpGet
HttpPost
属性来区分每种类型的HTTP请求的方法。在您的情况下,这听起来没有什么意义。

您可以使用自定义操作方法选择器


MVC将
int?
解释为可选变量(否则如何将int设置为null over GET?)。因此,如果不指定
mapCompanyId
,则有两个匹配的方法是正确的。解决此问题的方法是,在第二个方法中,只需将
mapCompanyId
更改为
public async Task Index(int-mapCompanyId)
,即可将其作为必需变量。MVC不会混淆使用哪一个。@Aron即使您使整数不可为空,它仍然会导致不明确的异常。事实上,框架无法根据HTTP谓词确定选择哪种方法才是问题的根源。@JustinHelgerson听起来很像ASP.NETWebAPI,而不是MVC。MVC允许按动词过滤,但仅此而已。而Web API完全是在动词上工作的。可能是@Aron的重复项我在发表评论之前对其进行了测试。:)以下是测试代码:。
[HttpGet]
public async Task<ActionResult> Index()

[HttpPost]
public async Task<ActionResult> Index(int? mapCompanyId)