gpt4 book ai didi

c# - 不明确的调用 asp.net mvc 操作方法

转载 作者:太空狗 更新时间:2023-10-30 00:27:55 26 4
gpt4 key购买 nike

有人可以解释为什么对以下操作的 POST 调用不明确吗?他们有不同的参数集?

[RequireRequestValueAttribute("setID")]
public ActionResult Add(int setID){}

[HttpPost]
public ActionResult Add(TypeModel model, int? queueID) {}

只有在使用 RequireRequestValueAttribute 属性时才会出现此问题,我使用该属性是因为我想为具有不同参数集的 Get 调用添加另一个方法。

以下是我正在使用的实现,在另一个 stackoverflow 问题上找到:

public class RequireRequestValueAttribute : ActionMethodSelectorAttribute
{
public RequireRequestValueAttribute(string valueName)
{
ValueName = valueName;
}
public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
{
return (controllerContext.HttpContext.Request[ValueName] != null);
}
public string ValueName { get; private set; }
}

最佳答案

因为在C#中是禁止有两个同名同参数类型的方法的。这与 ASP.NET MVC 无关。您应该重命名可以由 GET 调用的两个 Add 操作之一。

你不能有两个可以用同一个动词调用的同名 Action 名称(在你的例子中是 GET)。您需要重命名其中一个或使用另一个 HTTP 动词,就像您对 POST 操作所做的那样。


更新:

您可以尝试在自定义操作选择器属性中引入 HTTP 动词:

public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
{
return controllerContext.HttpContext.Request[ValueName] != null &&
controllerContext.HttpContext.Request.HttpMethod == "GET";
}

但坦率地说,我不会使用自定义操作选择器来验证请求参数是否存在。路由约束或数据注释似乎更适合这项任务。

关于c# - 不明确的调用 asp.net mvc 操作方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4651581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com