我正在为 ASP.NET Core 应用程序使用模型绑定,它配置了几个已知属性,然后是一个我想要添加任何其他 URL 属性的字典。我希望我的查询字符串如下所示:
/foobar?Id=5&Status=pending&SpecialKey=test
Run Code Online (Sandbox Code Playgroud)
并让它填充我的模型,其中属性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>();
}
}
Run Code Online (Sandbox Code Playgroud)
就目前情况而言,仅填充 Id/Status。我可以获得任何内容的唯一方法ExtraParams是使用ExtraParams[key]=test我不想要的查询字符串表示法。
我有一个类似的用例。以下是我使用的步骤
public async Task<IActionResult> GetAllItemsAsync(string searchString, int? pageNo = 1, int? pageSize = 10, Dictionary<string, object> filters = null)
{
<My-Controller-Logic>
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
[QueryStringActionFilter]
public async Task<IActionResult> GetAllItemsAsync(string searchString, int? pageNo = 1, int? pageSize = 10, Dictionary<string, object> filters = null)
{
<My-Controller-Logic>
}
Run Code Online (Sandbox Code Playgroud)
这样,除 searchString、pageNo 和 pageSize 之外的所有查询参数都会填充到过滤器内。
| 归档时间: |
|
| 查看次数: |
2617 次 |
| 最近记录: |