.net核心项目中有一个自定义OutputFormatter。在这里,我想在初始请求的查询字符串内使用一些信息。
在控制器内部,这可以通过FromQuery modelbinder很好地完成,为我提供了一个可以使用的对象。我也希望在我的输出格式化程序中有这个对象(模型)。
我能否以某种方式调用FromQuery作为实例,这样我甚至可以传入HttpContext或querystring来获取模型?
For Search_Config = 0 To 200
For Search_Library = 0 To 200
j = Search_Library * 20
If (Worksheets("Config Algemeen").Range("H2").offset(Search_Config, 0).Value = Worksheets("Library").Range("A2").offset(j, 0).Value) And Not (Worksheets("Config Algemeen").Range("H2").offset(Search_Config, 0).Value = "") Then
For k = 1 To 200
l = k * 2
n = l - 1
For m = 0 To 19
MyChoices(m) = Worksheets("Library").Range("A2").offset(j + m, l).Value
Next m
With Worksheets("Config Algemeen").Range("H2").offset(Search_Config, k)
If Not Worksheets("Library").Cells(2 + j, 1 + n).Value = "" Then
.AddComment Worksheets("Library").Cells(2 + j, 1 + n).Value
Else
'Nothing
End If
If Worksheets("Library").Range("A2").offset(j, l).Value = "*VALUE*" Or Worksheets("Library").Range("A2").offset(j, l).Value = "" Then
'Nothing
Else
.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:=Join(MyChoices, ",")
End If
End With
Next k
Else
'Nothing
End If
Next Search_Library
Next Search_Config
答案 0 :(得分:1)
使用HttpContext.Items
。在请求结束时,将清理放置在其中的对象。而且,您可以传递更多,默认值或更改的值(如果要更改绑定的对象,可能会很危险)
// GET api/values
[HttpGet]
public ActionResult Get([FromQuery] QData data)
{
HttpContext.Items["data"] = data;
.......
return Ok(....);
}
您还可以为不同类型的请求设置多个格式化程序。
public class Formatter : OutputFormatter
{
public override bool CanWriteResult(OutputFormatterCanWriteContext context)
{
return context.HttpContext.Items["data"] is QData;
}
public override Task WriteResponseBodyAsync(OutputFormatterWriteContext context)
{
var incoming = context.HttpContext.Items["data"] as QData;
.......
}
}
您可以将任何其他对象放入Items
并在格式化程序中使用该对象的方式相同。对于其他对象,由于它依赖于特定的结构,因此可以是更通用,更稳定的解决方案。