ฉันมีทางออกที่ดีกว่าสำหรับปัญหานี้
- คำขอเป็นสมาชิกของ ControllerBase คลาสนามธรรม
- GetSearchParams () เป็นวิธีการขยายที่สร้างขึ้นในคลาสผู้ช่วยร้อง
var searchparams = await Request.GetSearchParams();
ฉันได้สร้างคลาสแบบคงที่โดยใช้วิธีการขยายไม่กี่วิธี
public static class HttpRequestExtension
{
public static async Task<SearchParams> GetSearchParams(this HttpRequest request)
{
var parameters = await request.TupledParameters();
try
{
for (var i = 0; i < parameters.Count; i++)
{
if (parameters[i].Item1 == "_count" && parameters[i].Item2 == "0")
{
parameters[i] = new Tuple<string, string>("_summary", "count");
}
}
var searchCommand = SearchParams.FromUriParamList(parameters);
return searchCommand;
}
catch (FormatException formatException)
{
throw new FhirException(formatException.Message, OperationOutcome.IssueType.Invalid, OperationOutcome.IssueSeverity.Fatal, HttpStatusCode.BadRequest);
}
}
public static async Task<List<Tuple<string, string>>> TupledParameters(this HttpRequest request)
{
var list = new List<Tuple<string, string>>();
var query = request.Query;
foreach (var pair in query)
{
list.Add(new Tuple<string, string>(pair.Key, pair.Value));
}
if (!request.HasFormContentType)
{
return list;
}
var getContent = await request.ReadFormAsync();
if (getContent == null)
{
return list;
}
foreach (var key in getContent.Keys)
{
if (!getContent.TryGetValue(key, out StringValues values))
{
continue;
}
foreach (var value in values)
{
list.Add(new Tuple<string, string>(key, value));
}
}
return list;
}
}
ด้วยวิธีนี้คุณสามารถเข้าถึงพารามิเตอร์การค้นหาทั้งหมดของคุณได้อย่างง่ายดาย ฉันหวังว่านี่จะช่วยนักพัฒนาหลาย ๆ คน :)