GET api无法得到它的论据

时间:2017-11-29 14:27:43

标签: asp.net-core asp.net-core-routing

我有一个简单的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

完成

1 个答案:

答案 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。