我有一个简单的aspnet核心api控制器,当一个get动作时,但是这个动作无法从查询路径中获取它的参数。有什么我使用webapi路由错误的吗?
动作:
[HttpGet]
[AllowAnonymous]
public string Test(string arg) // arg is always null no matter what path I use
{
return arg;
}
路线:
routes.MapAreaRoute(
name: "ad",
areaName: "Ad",
template: "api/{area:exists}/{controller}/{action}/{id}",
defaults: new { controller = "Ad" }
);
routes.MapRoute(
name: "default",
template: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
日志:
> info:Microsoft.AspNetCore.Hosting.Internal.WebHost [1] 请求启动HTTP / 1.1 GET http://localhost/api/Ad/Ad/Test/asdfasdf dbug:Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler [9] AuthenticationScheme:Bearer未经过身份验证。 dbug:Microsoft.AspNetCore.Routing.RouteConstraintMatcher [1] 路线价值'广告'关键'区域'与约束' Microsoft.AspNetCore.Routing.Constraints.CompositeRouteConstraint'不匹配。 dbug:Microsoft.AspNetCore.Routing.RouteConstraintMatcher [1] 路线价值'广告'关键'区域'与约束' Microsoft.AspNetCore.Routing.Constraints.CompositeRouteConstraint'不匹配。 dbug:Microsoft.AspNetCore.Routing.RouteBase [1] 请求成功匹配路线名称' ad'和模板' api / {area:exists} / {controller} / {action} / {id}'。 dbug:Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker [1] 执行动作Api.Areas.Ad.Controllers.AdController.Test(Api) info:Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker [1] 使用arguments()执行操作方法Api.Areas.Ad.Controllers.AdController.Test(Api) - ModelState有效 dbug:Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker [2] 执行的操作方法Api.Areas.Ad.Controllers.AdController.Test(Api),返回结果Microsoft.AspNetCore.Mvc.ObjectResult。 dbug:Microsoft.AspNetCore.Mvc.Internal.ObjectResultExecutor [4] 在请求执行内容协商时未找到任何信息。 dbug:Microsoft.AspNetCore.Mvc.Internal.ObjectResultExecutor [2] 选择的输出格式化程序' Microsoft.AspNetCore.Mvc.Formatters.HttpNoContentOutputFormatter'和内容类型''写回复。 info:Microsoft.AspNetCore.Mvc.Internal.ObjectResultExecutor [1] 执行ObjectResult,写入值Microsoft.AspNetCore.Mvc.ControllerContext。 info:Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker [2] 执行动作Api.Areas.Ad.Controllers.AdController.Test(Api)193.6691ms dbug:Microsoft.AspNetCore.Server.Kestrel [9] 连接ID" 0HL9N6GCMPEP7"完成保持活跃的反应。 info:Microsoft.AspNetCore.Hosting.Internal.WebHost [2] 要求在218.2123ms 204
完成
答案 0 :(得分:1)
如果异常(http://localhost/api/Ad/Ad/Test/asdfasdf
)中显示的URI允许您输入方法。这两种解决方案中的一种应该有效:
1:
从路线中删除/{id}
并更改您的请求Uri:
http://localhost/api/Ad/Ad/Test?args=asdfasdf
2:
也可以在路线中重命名/{id}
/{args}
或者将方法的参数重命名为ID。