另一个是关于ASP.NET Web Api 2中的多个匹配操作
本文关键字:操作 Api ASP Web NET 另一个 | 更新日期: 2023-09-27 17:59:01
我读过这些问题:
找到多个与请求匹配的操作:webapi
Web API路由-找到多个与请求匹配的操作找到多个与请求Web API匹配的操作?
我更新了我的RouteConfig如下:
routes.MapRoute(
name: "Receipt",
url: "api/{controller}/{action}/{id}",
defaults: new { controller = "Receipt", action = "Post", source = UrlParameter.Optional }
);
创建这个新的路线图丝毫没有帮助解决的问题
以下是控制器中的相关功能:
public HttpResponseMessage Post ([FromBody]CreateReceiptViewModel source)
{
try
{
// stuff happens here
}
catch (Exception ex)
{
// something went wrong, save exception data to the database
// RecordError(ex, "Post Receipt", "ReceiptController/Post");
}
}
//public void RecordError(Exception ex, string action = "", string origin = "PocketPlooto API")
//{
// Error Error = new Error
// {
// Date = DateTime.Now,
// Detail = ex.ToString(),
// Message = ex.Message,
// Origin = origin,
// StackTrace = ex.StackTrace,
// Action = action
// };
// db.Errors.Add(Error);
// db.SaveChanges();
//}
函数相当大,所以我觉得在这里包含它是不切实际的。
有趣的是,虽然RecordError
得到了评论,但这篇文章做得很好。
如果我取消注释它,就会发生错误(我的测试环境不允许我以JSON以外的格式查看它,很抱歉给您带来不便):
"消息":"发生错误。",
"ExceptionMessage":"找到多个与请求匹配的操作:''r''n类型为WebApiService.Controllers.ReceptController''r''n类型为WebApiService.Controllers.ReceptController的记录错误",
"ExceptionType":"System.InvalidOperationException",
"StackTrace":"位于System.Web.Http.Controller.ApiControllerActionSelectorActionSelectorCacheItem.SelectAction(HttpControllerContext controllerContext)''r''n位于System.Web.Http.ApiControllerActionSelector.SelectAAction(HttpController Context controllerContent)''r''n(HttpControllerContext controllerContext,CancellationToken cancellionToken)''r''n位于System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()"
不幸的是,我并不真正理解堆栈跟踪,因为这里显然没有任何重复的操作,我甚至无法开始猜测WebApi在做什么,也无法猜测为什么在控制器中出现这个问题。
有人能澄清堆栈跟踪的含义以及为什么额外的函数是个问题吗?
如果不需要从外部访问私有方法,那么设置该方法的[NonAction]属性。