gpt4 book ai didi

c# - 如何将剩余查询参数绑定(bind)到 ASP.NET Core 中的字典

转载 作者:行者123 更新时间:2023-12-03 08:47:20 24 4
gpt4 key购买 nike

我正在为 ASP.NET Core 应用程序使用模型绑定(bind),它配置了几个已知属性,然后是一个我想要添加任何其他 URL 属性的字典。我希望我的查询字符串如下所示:

/foobar?Id=5&Status=pending&SpecialKey=test

并让它填充我的模型,其中属性 Id = 5,Status = Pending,并拥有一个名为 ExtraParams 的字典,其中包含一项,键为“SpecialKey”和“test”的值。

这是我的模型:

using Microsoft.AspNetCore.Http;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text.Json.Serialization;

namespace MyProject.Models
{
public class MyCustomModel
{
public string? Id { get; set; }
public string? Status { get; set; }
public string? SerialNumber { get; set; }
public string? Nickname { get; set; }
public string? DisplayName { get; set; }

[JsonExtensionData]
public Dictionary<string, object> ExtraParams { get; set; } = new Dictionary<string, JToken>();
}
}

就目前情况而言,仅填充 Id/Status。我可以在 ExtraParams 中获取任何内容的唯一方法是使用我不想要的 ExtraParams[key]=test 的查询字符串表示法。

最佳答案

我有一个类似的用例。以下是我使用的步骤

  • 向 Controller 操作方法添加可选参数
public async Task<IActionResult> GetAllItemsAsync(string searchString, int? pageNo = 1, int? pageSize = 10, Dictionary<string, object> filters = null)
{
<My-Controller-Logic>
}
  • 创建了 ActionFilterAttribute 覆盖
    public class QueryStringActionFilter : ActionFilterAttribute
{
private const string _additionalParamsFieldName = "filters";

public override void OnActionExecuting(ActionExecutingContext context)
{
var filters = new Dictionary<string, object>();
foreach (var kvp in context.HttpContext.Request.Query)
{
if (!context.ActionArguments.ContainsKey(kvp.Key))
{
filters.Add(kvp.Key, kvp.Value);
}
}
context.ActionArguments[_additionalParamsFieldName] = filters;
base.OnActionExecuting(context);
}
}
  • 将 Action 过滤器属性添加到我的 Controller 操作方法
[QueryStringActionFilter]
public async Task<IActionResult> GetAllItemsAsync(string searchString, int? pageNo = 1, int? pageSize = 10, Dictionary<string, object> filters = null)
{
<My-Controller-Logic>
}

这样,除 searchString、pageNo 和 pageSize 之外的所有查询参数都会填充到过滤器内。

关于c# - 如何将剩余查询参数绑定(bind)到 ASP.NET Core 中的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60875326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com