我在ASP.Net MVC项目的控制器中写了一个新方法,并在下面出现错误。我认为InvalidOperationException来自Swagger。我将其标记为“ ignored Api”,希望它将跳过该方法,但错误仍然存在:
[ApiExplorerSettings(IgnoreApi = true)]
public decimal CalculatePriceWithCampaign(
BeverageCapacityCampaign campaign,
BeverageCapacity capacity,
int count = 1)
{
switch (campaign.DiscountType)
{
case DiscountType.Fixed:
return (capacity.CapacityPrice - campaign.DiscountValue) * count;
case DiscountType.Percentage:
return (capacity.CapacityPrice * count) * campaign.DiscountValue;
default:
return capacity.CapacityPrice;
}
}
Run Code Online (Sandbox Code Playgroud)
但是在运行时出现此错误:
处理请求时发生未处理的异常。
InvalidOperationException:操作'Gorilla.WebApi.Source.Controller.Campaigns.BeverageCapacityCampaignController.CalculatePriceWithCampaign(Gorilla.WebApi)'具有多个参数,这些参数已从请求正文中指定或推断为绑定。每个动作只能绑定一个参数。检查以下参数,并使用'FromQueryAttribute'指定从查询绑定的边界,'FromRouteAttribute'指定从路由绑定的边界,以及'FromBodyAttribute'用于从body绑定的参数:
BeverageCapacityCampaignCampaign广告系列
BeverageCapacity容量
我可以找到建议检查nuget的信息,但是我所有的Nuget都是最新的。
No *_*rns 14
我的控制器有一些重构的代码,其方法被标记为公共。看起来要么将它们移出控制器或标记为私有才能纠正此问题。或者将讨厌的方法归因于[NonAction]也可能是一个选择,如asp.net Core mvc hide and except Web Api Controller Method中所要求的那样
小智 11
对于我来说,在新控制器的定义中会自动添加此先决条件。
我删除了它并且它有效
[Route("api/[controller]")]
[Apicontroller] //remove this line
Run Code Online (Sandbox Code Playgroud)
该错误来自模型绑定,与Swagger无关(ApiExplorerSettings属性的存在对错误没有影响)。
您有两个复杂的参数。即复杂类型
BeverageCapacityCampaign
BeverageCapacity
Run Code Online (Sandbox Code Playgroud)
该默认为模型绑定是复杂的参数从所述主体结合的请求的。但是,每个动作只能从body绑定一个参数。
所以你需要
ApiExplorerSettingsfrom System.Web.Http.Description将忽略帮助页面或其他任何原因(也许是大摇大摆)的归因动作...但是您仍然会遇到此异常-来自模型绑定级别的问题
| 归档时间: |
|
| 查看次数: |
4438 次 |
| 最近记录: |