Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core ASP.NET核心:从应用程序内部启动对应用程序的请求_Asp.net Core_.net Core_Asp.net Core 2.0 - Fatal编程技术网

Asp.net core ASP.NET核心:从应用程序内部启动对应用程序的请求

Asp.net core ASP.NET核心:从应用程序内部启动对应用程序的请求,asp.net-core,.net-core,asp.net-core-2.0,Asp.net Core,.net Core,Asp.net Core 2.0,在ASP.NET Core 2.0项目中,我试图向服务器本身发起一个新请求。由于Kestrel是一个托管web服务器,我认为这应该很容易做到,但我找不到答案 当您需要其他操作的结果来生成结果(可能是多个操作)但希望为每个操作运行整个管道时,这尤其有用。(如日志记录、授权或路由) 不,我不认为这是一个XY问题,我将编辑以澄清,并在最后提供用例 我想要实现的是避免使用网络层,否则HttpClient就是一种方法,而且很简单。但是如果我与网络进行交互,撇开开销不谈,我还需要知道服务器的托管URL和端

在ASP.NET Core 2.0项目中,我试图向服务器本身发起一个新请求。由于Kestrel是一个托管web服务器,我认为这应该很容易做到,但我找不到答案

当您需要其他操作的结果来生成结果(可能是多个操作)但希望为每个操作运行整个管道时,这尤其有用。(如日志记录、授权或路由)


不,我不认为这是一个XY问题,我将编辑以澄清,并在最后提供用例

我想要实现的是避免使用网络层,否则
HttpClient
就是一种方法,而且很简单。但是如果我与网络进行交互,撇开开销不谈,我还需要知道服务器的托管URL和端口,这使得它很难看

我将通过一个例子来详细说明:我已经使用了这样的模式来在web服务器的进程内托管(主要用于单元测试)

此测试服务器允许处理内存中的流,而无需在网络上进行任何绑定。我想用红隼达到类似的效果。或者,如果可能,构造一个
请求
对象,并传递一个引用,供web主机和管道处理

我可以想到几个这样的用例:

  • 将多个请求批处理到服务器(通过请求正文)并避免传输延迟
  • 在某些特定于操作的逻辑之后延迟运行路由,其中解释从服务器期望得到什么的最佳和最简单的关键是URL本身
  • 服务器端重定向的影响(
    server.Transfer
    在旧时代)
我知道安全风险和气味,但在某些情况下,这可能是一个很好的解决方案。具体来说,我的案例是批处理加上一些对访问受限且仅执行只读操作的小监视存根结果的计算,因此没有风险。

使用正确的客户端上下文可靠地再次运行整个管道的唯一方法是通过客户端进行往返,通常使用
重定向
返回类型

如果有一种方法可以完全在服务器端发起一个新的请求,这将有效地使您的服务器成为新的客户机,并且必须执行非常不安全的操作来“模拟”客户机。你基本上是在说一个男人在中间攻击你自己


(我不同意SamiAI90的回答,因为您没有特别询问API,还有许多其他可能的场景与API样式的访问、承载令牌等无关。)

您能否提供一些代码来更好地解释您试图实现的目标。到目前为止,这看起来像一个。那么,HttpClient?你试过什么?可能有吗@SamiAl90我真的看到了,我在寻找最后一个选择。但无法找到具体的解决方案,上面的答案是“我相信这是可能的”。我也相信这一点,但我不知道该怎么做!我认为这在很大程度上是一个XY问题。你想要做的是一个非常反模式的事情,如果我们知道你需要什么,可能有更好的方法来实现你的需求。什么场景?为什么要组合返回视图而不是对象数据的操作?这将如何最终合并在一起?但是,是的,ofc不能是不记名代币,也可以是其他代币,这只是一个例子。首先,你想复制所有的cookies。您可能需要复制复杂的有效载荷。而且日志记录仍然是错误的,如果他在做IP日志记录之类的典型工作,它就不能代表原始客户机。如果目的是以原始调用方的身份运行管道,那么一般来说(不使用
重定向
)这是一个坏主意。是的,您也可以将cookie附加到httpclient请求,因此该参数无效。总之,不管他做什么,
HttpClient
不会以某种实际模拟原始客户端请求的方式运行管道。你可以接近它,但它仍然是一个不同的客户。为什么它不会贯穿整个管道?当您使用HttpClient编写端到端测试时,请求将贯穿整个管道。所有过滤器都将被执行,就像使用前端调用服务器端点一样。
var server = TestServer.Create(appBuilder =>
{
    var startup = new TestStartup();
    startup.Configuration(appBuilder);
});

var client = server.HttpClient;
// Use the client to send requests