在我们的API中,我们添加了子应用程序testapi.com/app
,但是,当我们进行api调用时,它没有命中子应用程序并返回404 error
。 HttpClient
基地址指向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}.
你能帮我解决吗?
答案 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}
希望这会有所帮助,
克雷格。