在ASP.NET Core 2.0项目中,我正在尝试向服务器本身发起新请求。由于Kestrel是一个托管的Web服务器,我认为这应该很容易,但我找不到答案。
当您需要其他操作的结果来生成结果(可能是多个操作)时,这尤其有用,但您希望为每个操作运行整个管道。 (例如,记录,授权或路由)
不,我不认为这是一个XY问题,我会编辑澄清,并在最后提供用例。
我想要实现的是避免网络层,否则HttpClient
是可行的方法,而且很容易。但是,如果我与网络进行交互,除了开销之外,我还需要知道服务器的托管URL和端口,这会让它变得难看。
我将通过一个例子详细说明:我已经使用了这样的模式来进行Web服务器的进程内托管(主要用于单元测试)
var server = TestServer.Create(appBuilder =>
{
var startup = new TestStartup();
startup.Configuration(appBuilder);
});
var client = server.HttpClient;
// Use the client to send requests
此测试服务器允许在不对网络进行任何绑定的情况下处理内存中的流。我希望使用Kestrel获得类似的结果。或者,如果可能,构造一个Request
对象并传递一个引用,以供Web主机和管道处理。
我可以想到一些用例:
Server.Transfer
)的影响我知道安全风险和气味,但在某些情况下,这可能是一个很好的解决方案。具体来说,我的情况是批处理加上对访问受限且只执行只读操作的小监控存根的结果的一些计算,因此没有风险。
答案 0 :(得分:0)
使用正确的客户端上下文可靠再次运行整个管道的唯一方法是通过客户端往返,通常使用Redirect
返回类型。
如果有一种方法可以完全在服务器端发起新请求,这将有效地使您的服务器成为新客户端,并且它必须做非常不安全的事情来模仿"客户端。你基本上都在谈论对你自己的中间人攻击。
(我不同意SamiAI90的答案,因为你没有特别询问API,还有很多其他可能的场景与API式访问,不记名令牌等无关。 )