我正在编写一个 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中调用该方法并抛出找不到该方法的错误。
如果我更改方法的名称,它就可以工作。
是否可以有两个具有相同方法名称的控制器?
当然这是可能的。问题是你的路线。 您在 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