首页 > 解决方案 > API 调用未命中 WebAPI 子文件夹

问题描述

在我们的 API 中,我们添加了子应用程序testapi.com/app,但是当我们进行 api 调用时,它并没有命中子应用程序并返回404 errorHttpClient基地址指向testapi.com/app. 当我尝试进行 api 调用时testapi.com/app/ping/{id},它会返回404,但是当我调用它时testapi.com/ping/{id}它工作正常。我以前从未这样做过,所以我不知道如何解决它。尝试将子文件夹添加到MapRoute其中,但没有帮助。

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "app/{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

控制器:

[HttpGet]
    [Route("~/ping/{id}")]
    public JsonResult<TestListDTO[]> getPing(Guid id)
    {

       TestListDTO[] listDto = null;
       try
        {
           using (var ctx = new hubEntities())
           {
               if (id.Length == 18)
               {
                   var Logs = ctx.do_smth(id);
                   listDto = Mapper.Map<log_Result[], TestListDTO[]>(Logs.ToArray());
                }
               else if (id.Length == 36)
                {
                    Guid Idguid = new Guid(id);
                    var auditLogs = ctx.select_invoice_audit_log(securityUserId, accountIdOwner, null, invoiceIdguid);
                     var Logs = ctx.do_smth(id);
                    listDto = Mapper.Map<log_Result[], TestListDTO[]>(Logs.ToArray());
                }

            }
        }
        catch (Exception e)
        {

        }
       return Json(listDto);
    }

当我跟踪从 API 调用获得的响应时显示:requestMessage.RequestUri.AbsoluteUri 指向父应用程序而不是子应用程序http://testapi.com/ping/{id}. 你能帮我解决它吗?

标签: asp.net-mvc

解决方案


如果您不启用属性路由,则使用常规路由。
这意味着您的[Route()]属性没有任何区别,并且动作命中将基于:

{controller}/{action}/{id}

如果要启用属性路由,则需要在配置中添加:

config.MapHttpAttributeRoutes();

有关启用属性路由的更多详细信息,请参阅此链接。

如果您不启用属性路由,那么我希望这样的 URL 可以工作:

testapi.com/app/{YourControllerName}/getPing/{id}

动作名称基本上就是方法名称。如果您启用了属性路由,那么我希望这个 URL 可以工作:

testapi.com/app/ping/{id}

希望这会有所帮助,
克雷格。


推荐阅读