是否可以在C#中使用不同的参数调用相同的URL?例如,如果我这样做,将导致AmbiguousActionException
[HttpPost("SetDog")]
public async Task<bool> SetDog([FromBody] Affenpinscher affenpinscher)
{
...
}
[HttpPost("SetDog")]
public async Task<bool> SetDog([FromBody] Bulldog bulldog)
{
...
}
我知道我可以更改控制器的名称,但这不是一个选择。所有请求的URL都必须相同,但唯一的变化将是接收到的参数。
所有请求的网址均为www.foo.com/Dogs/SetDog
P.S:不要只关注狗的例子,原因只是为了解释问题
答案 0 :(得分:0)
不。您可以通过使该URL接受Object,然后对其进行分析以猜测其类型来实现类似的目的。但是.net样式类型重载无法使用这些控制器完成,因为输入不是真正的强类型。
答案 1 :(得分:0)
为MVC定义一个操作选择器,以了解要触发哪种操作方法
[RouteDogToAction("affenpinscher")]
public async Task<bool> SetDog([FromBody] Affenpinscher affenpinscher)
{
//Implementation
}
[RouteDogToAction("bulldog")]
public async Task<bool> SetDog([FromBody] Bulldog bulldog)
{
//Implementation
}
覆盖ActionMethodSelectorAttribute类
public class RouteDogToActionAttribute : ActionMethodSelectorAttribute
{
public RequireRequestValueAttribute(string dogType)
{
DogType = dogType;
}
public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
{
return (controllerContext.HttpContext.Request[DogType] != null);
}
public string DogType { get; private set; }
}