【发布时间】:2021-10-22 02:15:06
【问题描述】:
我有一个 AspNet/AngularJS 网站(使用 System.Web.Http 版本 5.2.6.0),我正在添加卡支付集成,具有 3DS 安全性。 3DS 有一个称为“数据设备收集”的步骤,其中 PSP 端点向您发送回一个 url,您必须将其发布到前端的隐藏 iframe 中。
大概有一些 javascript 收集设备数据,然后将 iframe 重定向到您提供的 url。该网址后面的页面几乎无关紧要,重要的是监听重定向。它只需要包含一些特定的 html,以便您可以验证您是否被重定向到正确的页面。
所以我只是在我的网站上添加了一个静态页面并提供了网址。重定向尝试导致“405 方法不允许”,因为 PSP 的设备收集逻辑对重定向 url 执行 POST。
所以我正在尝试创建一个允许 POST 并返回 html 页面的 API 方法。事实证明,这出人意料地具有挑战性。这些是我从 StackOverflow 上的答案中尝试过的一些事情:
[HttpPost]
[AllowAnonymous]
[Route("methodnotification")]
public NegotiatedContentResult<string> MethodNotification()
{
return base.Content(System.Net.HttpStatusCode.OK,"<div id = \"threeDSMethodData\" name = \"threeDSMethodData\" > PROCESSING...</ div >");
}
这将在 PostMan 中返回以下内容:
"
处理中... div >"它可能看起来没问题,但它实际上是一个 application/json 类型的字符串;字符集=utf-8。我尝试了 FireFox 的 POST,它返回:
正在处理... div >即使将 Accept 标头设置为仅接受“text/html”也会返回“纯文本”而不是 html。 我尝试了 base.Content 的不同重载,这需要我添加一个“格式化程序”(如果我还想指定内容类型),并将方法的返回类型更改为 FormattedContentResult。在尝试了不同的格式化程序后,我放弃了,因为它一直给我 JSON 或字符串。
我还尝试了以下方法:
return new System.Web.Mvc.ContentResult { Content = "<div id = \"threeDSMethodData\" name = \"threeDSMethodData\" > PROCESSING...</ div >", ContentType = "text/html" };请注意,此处必须使用完全限定名称,因为如果我为 System.Web.Mvc 添加 using 语句,我的所有注释都会开始在 System.Web.Mvc 和 System.Web.Http 之间给出“模糊引用”。这种方法还返回一个 JSON 文件。
如何从 ASPNET 中的 POST 返回 html?
编辑:API 项目面向 .NET Framework 4.6。我希望我知道对应的是哪个版本的 ASPNET。
【问题讨论】:
标签: html asp.net-core post