API调用未访问WebAPI子文件夹

时间:2018-07-17 20:27:49

标签: asp.net-mvc

在我们的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}. 你能帮我解决吗?

1 个答案:

答案 0 :(得分:0)

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

{controller}/{action}/{id}

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

config.MapHttpAttributeRoutes();

有关启用属性路由的信息,请参见this link for more details

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

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

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

testapi.com/app/ping/{id}

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