在ASP.NET Core Web Api中具有带有多个查询字符串参数的多个get-method

卡巴斯尔

我正在构建一个Web API,其中有一个资源必须具有3个get方法,如下所示:

    [HttpGet]
    [Route("{city}/{streetName}/{streetNumber}/{littera}")]
    public IActionResult GetByAddress([FromQuery]string city, [FromQuery]string streetName, [FromQuery]int streetNumber, [FromQuery]string littera)
    {
        var model = _availabilityService.FindByAddress(city, streetName, streetNumber, littera);
        return Ok(model);
    }

    [HttpGet("{pointId}")]
    public IActionResult GetByPointId(string pointId)
    {
        var model = _availabilityService.FindByPointId(pointId);
        return Ok(model);
    }

    [HttpGet]
    [Route("{xCoordinate}/{yCoordinate}")]
    public IActionResult GetByCoordinates([FromQuery]decimal xCoordinate, [FromQuery]decimal yCoordinate)
    {
        var model = _availabilityService.FindByCoordinates(xCoordinate, yCoordinate);
        return Ok(model);
    }

仅具有一个参数(pointId)的get方法可以正常工作,因为它不被视为查询字符串,而被视为id。但是,看来剩下的2种方法在ASP.NET中是无法区分的。

我在这里真的很茫然,无法弄清楚为什么它不起作用。我能够解决的问题是,如果我删除其中一种方法,则另一种效果很好。

关于我在做什么错的任何建议吗?

仅供参考,相应的url:s应该如下所示:

api/1.0/availabilities?city=Metropolis&streetName=Superstreet&streetNumber=1&littera=A

/api/1.0/availabilities?xCoordinate=34.3444&yCoordinate=66.3422

谢谢!

ypsilo0n

首先,您要混合使用RouteParameters和QueryParameters。

这:

[HttpGet]
[Route("{xCoordinate}/{yCoordinate}")]
public IActionResult GetByCoordinates([FromQuery]decimal xCoordinate, [FromQuery]decimal yCoordinate)
{
    var model = _availabilityService.FindByCoordinates(xCoordinate, yCoordinate);
    return Ok(model);
}

将控制器动作映射GetByCoordinates到这样的路由:

/api/1.0/availabilities/34.3444/66.3422

但是,您还指定了您期望的内容,xCoordinate并将yCoordinate其与查询参数绑定。因此,上述网址将会匹配的动作,但xCoordinateyCoordinate会被绑定到它的默认值(在这种情况下为0)。

因此,要获得所需的路线,您不应声明路线参数:

[HttpGet]
[Route("")] // <- no route parameters specified
public IActionResult GetByCoordinates([FromQuery]decimal xCoordinate, [FromQuery]decimal yCoordinate)
{
   // will be matched by e.g.
   // /api/1.0/availabilities?xCoordinate=34.3444&yCoordinate=66.3422
}

现在您所需的路线将匹配。

注意:您不能将两个动作映射到同一路由-路由中间件不会知道要选择哪个动作。因此,从中删除路由参数也可以GetByAddress将两个操作有效地映射到同一条路由:

/api/1.0/availabilities?{any=number&of=query&parameters=here}

因此,您将不得不通过其他路线段来区分它们。

[HttpGet]
[Route("address")] // <--
public IActionResult GetByAddress([FromQuery]string city, [FromQuery]string streetName, [FromQuery]int streetNumber, [FromQuery]string littera)
{
    // will be matched by e.g.
    // api/1.0/availabilities/address?city=Metropolis&streetName=Superstreet&streetNumber=1&littera=A
}

进一步阅读:

模型绑定/路由

小建议:

Microsftloglevel设置为Debugin appsettings.json(在标准Asp.Net Core WebApplication模板中自动生成),当在红est下运行时,在控制台输出中的路由选择时,您将获得有关路由选择/错误的非常有用的信息。

{
  "Logging": {
  "IncludeScopes": false,
  "LogLevel": {
    "Default": "Debug",
    "System": "Information",
    "Microsoft": "Debug"
}

或将调试记录器设置StartUp.csLogLevel.Debug,您可以直接在Visual Studio中的调试输出中获得相同的信息。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        // ...

        loggerFactory.AddDebug(LogLevel.Debug);

        // ...
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Asp.net Web Api查询带有破折号的字符串参数

来自分类Dev

如何检查 http 请求在 ASP.Net Core Web API 中是否没有查询字符串

来自分类Dev

具有多个构造函数的ASP .Net Core Web API依赖注入类

来自分类Dev

具有COM对象的ASP.NET CORE WEB API

来自分类Dev

调试asp.net core web API

来自分类Dev

ASP.NET Core,以查询字符串为模板的Web API RouteAttribute

来自分类Dev

如何在.net core 2.2 Web API中传递带有“禁止”响应的字符串

来自分类Dev

如何从Web API调用ASP.NET Core Web MVC

来自分类Dev

如何从Web API调用ASP.NET Core Web MVC

来自分类Dev

ASP .Net Core Web 应用程序调用 Web API

来自分类Dev

ASP.NET Web API:通过查询字符串的多个自定义对象

来自分类Dev

带有字符串参数的 FromBodyAttribute 需要 JSON ASP.NET CORE 2.1 的双引号

来自分类Dev

带有字符串参数的 FromBodyAttribute 需要 JSON ASP.NET CORE 2.1 的双引号

来自分类Dev

使用Web API的ASP.Net Core路由

来自分类Dev

ASP.NET Core 1.0 Web API不返回XML

来自分类Dev

在Asp.net Core中将字典发布到Web API

来自分类常见问题

使用VSTS的ASP.NET Core Web API的CI / CD

来自分类Dev

ASP.NET Core Web Api自动帮助页面

来自分类Dev

ASP.NET Core 1.0 Web API使用camelcase

来自分类Dev

Odata ASP.NET Core 2.2 Web API分页

来自分类Dev

ASP.NET Core Web API和角色授权

来自分类Dev

从ASP .NET Core Web API方法返回完整的XML响应

来自分类Dev

ASP.NET Core Web API InvalidOperationException:无法解析服务

来自分类Dev

asp.net core 2 Web API超时问题

来自分类Dev

在本地托管Asp.net Core Web Api

来自分类Dev

C#ASP.NET Core Web API包含在何处

来自分类Dev

ASP Net Core Web API自定义模型验证

来自分类Dev

ASP.NET Core Web API引发HTTP 500

来自分类Dev

无法从asp.net core web api获得角度响应

Related 相关文章

  1. 1

    Asp.net Web Api查询带有破折号的字符串参数

  2. 2

    如何检查 http 请求在 ASP.Net Core Web API 中是否没有查询字符串

  3. 3

    具有多个构造函数的ASP .Net Core Web API依赖注入类

  4. 4

    具有COM对象的ASP.NET CORE WEB API

  5. 5

    调试asp.net core web API

  6. 6

    ASP.NET Core,以查询字符串为模板的Web API RouteAttribute

  7. 7

    如何在.net core 2.2 Web API中传递带有“禁止”响应的字符串

  8. 8

    如何从Web API调用ASP.NET Core Web MVC

  9. 9

    如何从Web API调用ASP.NET Core Web MVC

  10. 10

    ASP .Net Core Web 应用程序调用 Web API

  11. 11

    ASP.NET Web API:通过查询字符串的多个自定义对象

  12. 12

    带有字符串参数的 FromBodyAttribute 需要 JSON ASP.NET CORE 2.1 的双引号

  13. 13

    带有字符串参数的 FromBodyAttribute 需要 JSON ASP.NET CORE 2.1 的双引号

  14. 14

    使用Web API的ASP.Net Core路由

  15. 15

    ASP.NET Core 1.0 Web API不返回XML

  16. 16

    在Asp.net Core中将字典发布到Web API

  17. 17

    使用VSTS的ASP.NET Core Web API的CI / CD

  18. 18

    ASP.NET Core Web Api自动帮助页面

  19. 19

    ASP.NET Core 1.0 Web API使用camelcase

  20. 20

    Odata ASP.NET Core 2.2 Web API分页

  21. 21

    ASP.NET Core Web API和角色授权

  22. 22

    从ASP .NET Core Web API方法返回完整的XML响应

  23. 23

    ASP.NET Core Web API InvalidOperationException:无法解析服务

  24. 24

    asp.net core 2 Web API超时问题

  25. 25

    在本地托管Asp.net Core Web Api

  26. 26

    C#ASP.NET Core Web API包含在何处

  27. 27

    ASP Net Core Web API自定义模型验证

  28. 28

    ASP.NET Core Web API引发HTTP 500

  29. 29

    无法从asp.net core web api获得角度响应

热门标签

归档