c# - FromQueryAttribute 是如何实际工作的,我为什么需要它?

标签 c# asp.net-mvc asp.net-core .net-core

我正在使用一些预先存在的代码,这些代码使用 HttpGet 端点来获取所有评论。它采用一些默认参数,并且在每个参数之前用 [FromQuery] 修饰。属性。我有点困惑为什么我们在这里需要它以及它对我的真正作用。
我在网上找到的只是这个文档:
(https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.fromqueryattribute?view=aspnetcore-2.2)
虽然这并没有回答我的问题......

  • 什么是查询字符串?
  • 它如何在端点中使用?
  • 什么时候不需要指定这个属性?我没有看到它被太多使用。

  • [HttpGet]
    [ProducesResponseType(typeof(FooResponse), 200),
    public async Task<ActionResult<FooResponse>> GetAll([FromQuery]string sortColumn = "CommentId",
        [FromQuery]SortDirections sortDirection = SortDirections.Asc, 
        [FromQuery]string filter = "", 
        [FromQuery]int page = 1, 
        [FromQuery]int pageSize = 10)
    {
        var data = await _mediator.Send(new GetAllComments(sortColumn, sortDirection, filter, page, pageSize));
    .
    .
    .
        return Ok(data);
    }
    
    我怀疑它与传递到 URL 中的内容有关,但我不太确定......

    最佳答案

    这里的用法是多余的。如果没有 [FromQuery],该操作的功能将相同。应用于所有参数,因为它只响应 GET 请求。

    What is a query string?



    查询字符串是 ? 之后的 URI 部分。字符被应用。它构成了 URI 的数据部分,而不是纯路由部分。

    How is it used in endpoints?



    这里的问题有点模糊,所以问“它在请求中是如何使用的?”会更合适。答案是它是一种将数据与 GET 请求一起传递到特定 URI 的方法。与其他 HTTP 方法不同,GET 并不真正允许请求“正文”。 (实际上,规范在技术上确实允许这样做,但几乎普遍没有以这种方式实现。)

    When is it that I don't need to specify this attribute? I don't see it being used very much.



    同样,一个更好的问题是“我什么时候真正需要指定这个属性?”答案基本上是当数据的来源不明确时。这几乎总是适用于其他 HTTP 方法,例如 POST。默认情况下,数据应该来自那里的请求正文,并且根据该请求正文的内容类型,绑定(bind)应该是 FromFormFromBody ,这通常是那里的参数的默认值。 (默认值取决于您处理的是传统 MVC 样式 Controller 还是 API 样式 Controller 。)如果您需要在这种情况下从查询字符串而不是正文中实际获取特定参数,那么你会申请 [FromQuery]归因于该特定参数。

    关于c# - FromQueryAttribute 是如何实际工作的,我为什么需要它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55500005/

    相关文章:

    asp.net-mvc - Node.Js 和 ASP.NET MVC 应用程序之间的通信

    c# - 如何强制 Visual Studio 使用 x64 DNX SDK 架构

    c# - 如何在Asp核心Web应用(MVC)上创建和使用Docker卷

    c# - 是否可以抛出 MessageQueueException?

    c# - 将查询结果传递给 SSIS 中的变量

    c# - 如何始终将 PopUp 放在 WPF 中的 ToggleButton 下

    asp.net-mvc - 在生产环境中使用 mvc 4 中的代码优先方法添加新列

    C# EndOfStream 始终为真 - 查找/定位到 0 不起作用

    c# - 重构重复的 Lambda 表达式

    c# - 在 CentOS/Linux 上正确配置 dotnet (ASP.NET Core 2.1) 环境