另一个是关于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在做什么,也无法猜测为什么在控制器中出现这个问题。

有人能澄清堆栈跟踪的含义以及为什么额外的函数是个问题吗?

另一个是关于ASP.NET Web Api 2中的多个匹配操作

如果不需要从外部访问私有方法,那么设置该方法的[NonAction]属性。