ASP.NET MVC:当两个控制器具有相同方法名称时找不到方法

问题描述 投票:0回答:1

我正在编写一个 ASP.NET MVC 应用程序。我有两个控制器,

Controller1
Controller2
。我的
SearchBySSN
中有一个名为
Controller1
的方法。我从视图中通过 Ajax 调用此方法:

$.ajax(
     {
         type: "POST",
         data: model,
         headers: {
             "RequestVerificationToken":
                 $('input:hidden[name="__RequestVerificationToken"]').val()
         },
         url: '@Url.Action("SearchBySSN", "Controller1")',
         success: function (result) {

         },
         error: OnError
     });

我的方法是这样的

[HttpPost("SearchBySSN")]
[ValidateAntiForgeryToken]
[ClientWebError(IsPartial = true)]
public async Task<IActionResult> SearchBySSN(string SSN)
{
}

当我在

Controller2
中创建同名方法时,我尝试在controller1中调用该方法并抛出找不到该方法的错误。

如果我更改方法的名称,它就可以工作。

是否可以有两个具有相同方法名称的控制器?

c# ajax asp.net-mvc
1个回答
0
投票

当然这是可能的。问题是你的路线。 您在 HTTPPost 属性中将路由定义为 SearchBySSN,我假设您在第二个控制器中做了同样的事情。

这会导致您将函数绑定到路由 /SearchBySSN,但这不起作用。

您是否定义了默认路由?在您的 Startup.cs/Programm.cs 中应该与此类似:

routes.MapRoute("Default","{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = "" } 
        ); 

您无需再次在属性中手动设置路线。所以只需将其删除即可。

[HttpPost]
[ValidateAntiForgeryToken]
[ClientWebError(IsPartial = true)]
public async Task<IActionResult> SearchBySSN(string SSN)
{
}

现在应该可以在 /controller1/SearchBySSN 和 /Controller2/SearchBySSN

© www.soinside.com 2019 - 2024. All rights reserved.