asp.net-mvc - API 调用未命中 WebAPI 子文件夹
问题描述
在我们的 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}.
你能帮我解决它吗?
解决方案
如果您不启用属性路由,则使用常规路由。
这意味着您的[Route()]
属性没有任何区别,并且动作命中将基于:
{controller}/{action}/{id}
如果要启用属性路由,则需要在配置中添加:
config.MapHttpAttributeRoutes();
有关启用属性路由的更多详细信息,请参阅此链接。
如果您不启用属性路由,那么我希望这样的 URL 可以工作:
testapi.com/app/{YourControllerName}/getPing/{id}
动作名称基本上就是方法名称。如果您启用了属性路由,那么我希望这个 URL 可以工作:
testapi.com/app/ping/{id}
希望这会有所帮助,
克雷格。
推荐阅读
- pyephem - pyephem - 为时间方程计算太阳的赤经计算
- excel - 操作 excel 中的单元格以计算 Excel 中的列数
- javascript - 如何防止特定元素在表单内提交?
- ios - 更改 iOS 中的导航栏位置后,UIbarbutton 操作不起作用
- python - 我可以在 seaborn 和 networkx 之间协调颜色吗?
- c# - EF Core 缺少快照 - 身份服务器
- asp.net-identity - 如何在 IdentityServer 4 中配置其他身份验证选项?
- c - 为什么在输入错误类型的值作为输入时,变量“b”总是赋值为 1?
- excel - 如何将两个或多个 Excel 数据或文件导入 Gridview
- c++ - 除数大于两个大因数时的模积