【问题标题】:Request to another MVC action from within an Action从一个动作中请求另一个 MVC 动作
【发布时间】:2016-08-04 17:36:53
【问题描述】:

我有以下代码:

var url = Url.Action("JobDetailsPDF", "PdfController", new { orderid = model.OrderId }, Request.Url.Scheme);

var request = new HttpRequestMessage(HttpMethod.Get, url);
request.Headers.TryAddWithoutValidation("Cookie", Request.Headers["Cookie"]);

var client = new HttpClient();

var response = await client.SendAsync(request);
var result = await response.Content.ReadAsByteArrayAsync();

Authorize 属性似乎一直将请求重定向到登录屏幕,即使在请求中添加了 auth cookie。

为什么我无法将 cookie 发送到同一站点中的另一个操作,如果可以,为什么在添加 cookie 时授权属性会重定向请求?

谢谢

【问题讨论】:

  • 您应该将您尝试调用的操作中的逻辑移动到它自己的类中,并在您需要的任何操作方法中使用它。这样你就不会通过 HTTP 请求不必要地调用它(以及将产生的所有开销)

标签: asp.net-mvc authentication cookies httpclient


【解决方案1】:

从后端应用程序向同一个后端应用程序发出 HTTP 请求通常是个坏主意。

您可以将逻辑从 PdfController 下的 JobDetailsPDF 操作移动到可以从两个地方使用的一些通用类:JobDetailsPDF 和您当前的代码位置。

【讨论】:

  • 感谢您的回答,当我开始遇到问题时,我已经开始重构,但我想了解为什么将 cookie 从一个操作发送到下一个操作不起作用。你碰巧知道吗?
  • 第一个请求来自客户端浏览器(其中包含身份验证 cookie),而第二个请求由您的后端服务器完成,其中没有身份验证 cookie。
  • 不会添加来自传入请求的 cookie 包括 auth cookie 吗?
  • 你可以这样做,它应该可以工作,但整体解决方案设计看起来很奇怪,开销很大。
猜你喜欢
  • 2010-11-23
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多