Newtonsoft JSON反序列化可在本地和实时环境中使用,但不适用于ASP.NET MVC应用程序的测试

丹26

我目前正在从事一个涉及使用支付网关的项目。iframe用于保存付款网关。通过发送以下POST可以检索iframe的网址。

ResponseBody b = new ResponseBody();
b.SenderId = ConfigurationManager.AppSettings["SenderId"];
b.Username = ConfigurationManager.AppSettings["PayUsername"];
b.Password = ConfigurationManager.AppSettings["PayPassword"];
b.PaymentSessionProviderReference = transaction.TransactionRef;
b.AmountInCents = Decimal.ToInt32(purchaseDetails.CartTotal * 100);
b.ReturnURL = redirectorLink;
b.BackgroundColor = "#ffffff";
b.InlineFrame = true;
if ((string)Session["Language"] == "en-EN") { b.Language = "EN"; }

client.BaseAddress = new Uri(url);

 HttpResponseMessage response = await client.PostAsJsonAsync("PreparePayment", b);

然后,对此帖子的回复将保留指向付款网关的网址,然后在iframe中打开该网址。另外,在此POST中也指定了returnLink,在该位置上,网关将在用户输入其付款明细之后,在iframe中重定向用户。

为了让我确认付款状态以继续工作流,然后我使用returnLink属性中指定的操作方法通过另一个POST请求付款。这样做如下:

GetPaymentModel b = new GetPaymentModel();
b.SenderId = ConfigurationManager.AppSettings["SenderId"];
b.Username = ConfigurationManager.AppSettings["PayUsername"];
b.Password = ConfigurationManager.AppSettings["PayPassword"];
b.PaymentSessionProviderReference = transaction.TransactionRef;
b.MessageId = null;
b.PaymentId = null;

client.BaseAddress = new Uri(url);

HttpResponseMessage response = await client.PostAsJsonAsync("GetPayment", b);

现在这是问题开始的地方。在所有环境中都正确返回了JSON。然后,此JSON将反序列化,如下所示:

string jsonResponse = "";
jsonResponse = await response.Content.ReadAsStringAsync();
AvaLogger.WriteLog(jsonResponse);

//Yet to figure out how to log trace on the test server.
ITraceWriter traceWriter = new MemoryTraceWriter();
paymentDetails = JsonConvert.DeserializeObject<PaymentDetailsModel>(jsonResponse, 
    new JsonSerializerSettings { TraceWriter = traceWriter, Converters = { new 
    JavaScriptDateTimeConverter() }}
);

AvaLogger.WriteLog("Information For: " + paymentDetails.paymentSessionProviderReference + ". Host message: " + paymentDetails.hostMessage);

在本地和实时环境上记录此信息时,日志方法记录以下信息:

[24/06/2020 08:38:46] <PaymentResolver>d__12: MoveNext: {"transactionTypeField":0,"authorisationCodeField":"425643","batchNumberField":"","hostCodeField":"000","hostMessageField":"APPROVED","merchantAccountField":"1000","merchantTerminalField":null,"maskedCardNumberField":"444444****4444","detectedCardApplicationField":"VISA","paymentDateField":"2020-06-24T08:38:59","anyField":null,"paymentIdField":153938,"paymentSessionProviderReferenceField":"G2315","paymentStateField":3,"amountInCentsField":2000,"pGDataField":{"paymentGatewayReferenceField":"93177947","emailAddressField":"[email protected]","anyField":null,"PropertyChangedEvent":null},"assignmentsField":[],"PropertyChangedEvent":null}
 LogMode:   NotSet
 UTC TimeStamp:     24/06/2020 06:38:46
 
[24/06/2020 08:38:46] <PaymentResolver>d__12: MoveNext: Information For: G2315. Host message: APPROVED
 LogMode:   NotSet
 UTC TimeStamp:     24/06/2020 06:38:46

JSON已被完全检索,并且数据已正确反序列化。但是,当涉及到测试环境时,会发生以下情况:

[24/06/2020 09:48:32] <PaymentResolver>d__12: MoveNext: {"transactionTypeField":0,"authorisationCodeField":"316120","batchNumberField":"","hostCodeField":"000","hostMessageField":"APPROVED","merchantAccountField":"1000","merchantTerminalField":null,"maskedCardNumberField":"444444****4444","detectedCardApplicationField":"VISA","paymentDateField":"2020-06-24T09:48:26","anyField":null,"paymentIdField":153949,"paymentSessionProviderReferenceField":"G2333","paymentStateField":3,"amountInCentsField":500,"pGDataField":{"paymentGatewayReferenceField":"93180750","emailAddressField":"[email protected]","anyField":null,"PropertyChangedEvent":null},"assignmentsField":[],"PropertyChangedEvent":null}
 LogMode:   NotSet
 UTC TimeStamp:     24/06/2020 07:48:32
 
[24/06/2020 09:48:32] <PaymentResolver>d__12: MoveNext: Information For: . Host message: 
 LogMode:   NotSet
 UTC TimeStamp:     24/06/2020 07:48:32

JSON仍正确返回。但是,不会对数据进行反序列化。结果,paymentDetails的所有属性(在文章底部显示的PaymentDetailsModel实例)将保持为空。

是否存在某种可能与此混淆的服务器配置?感谢您的阅读,并希望这对您有足够的参考价值!

PS我正在尝试弄清楚如何打印TraceWriter实例的日志,因为在ASP.NET上处理API还是比较陌生的。

以供参考:

PaymentDetailsModel:

 public class PaymentDetailsModel
    {
        [JsonProperty("transactionTypeField", Required = Required.Default, NullValueHandling = NullValueHandling.Ignore)]
        public TransactionTypes transactionType { get; set; }

        [JsonProperty("authorisationCodeField", Required = Required.Default, NullValueHandling = NullValueHandling.Ignore)]
        public string authorisationCode { get; set; }

        [JsonProperty("batchNumberField", Required = Required.Default, NullValueHandling = NullValueHandling.Ignore)]
        public string batchNumber { get; set; }

        [JsonProperty("hostCodeField", Required = Required.Default, NullValueHandling = NullValueHandling.Ignore)]
        public string hostCode{ get; set; }

        [JsonProperty("hostMessageField", Required = Required.Default, NullValueHandling = NullValueHandling.Ignore)]
        public string hostMessage { get; set; }

        [JsonProperty("merchantAccountField", Required = Required.Default, NullValueHandling = NullValueHandling.Ignore)]
        public string merchantAccount { get; set; }

        [JsonProperty("merchantTerminalField", Required = Required.Default, NullValueHandling = NullValueHandling.Ignore)]
        public string merchantTerminal { get; set; }

        [JsonProperty("maskedCardNumberField", Required = Required.Default, NullValueHandling = NullValueHandling.Ignore)]
        public string maskedCardNumber { get; set; }

        [JsonProperty("detectedCardApplicationField", Required = Required.Default, NullValueHandling = NullValueHandling.Ignore)]
        public string detectedCardApplication { get; set; }

        [JsonProperty("paymentDateField", Required = Required.Default, NullValueHandling = NullValueHandling.Ignore)]
        public string paymentDate { get; set; }

        [JsonProperty("anyField", Required = Required.Default, NullValueHandling = NullValueHandling.Ignore)]
        public object any { get; set; }

        [JsonProperty("paymentIdField", Required = Required.Default, NullValueHandling = NullValueHandling.Ignore)]
        public int paymentId { get; set; }

        [JsonProperty("paymentSessionProviderReferenceField", Required = Required.Default, NullValueHandling = NullValueHandling.Ignore)]
        public string paymentSessionProviderReference { get; set; }

        [JsonProperty("paymentStateField", Required = Required.Default, NullValueHandling = NullValueHandling.Ignore)]
        public PaymentStates paymentState { get; set; }

        [JsonProperty("amountInCentsField", Required = Required.Default, NullValueHandling = NullValueHandling.Ignore)]
        public int amountInCents { get; set; }

        [JsonProperty("pGDataField", Required = Required.Default, NullValueHandling = NullValueHandling.Ignore)]
        public PGdataModel pGData { get; set; }

        [JsonProperty("assignmentsField", Required = Required.Default, NullValueHandling = NullValueHandling.Ignore)]
        public object[] assignments { get; set; }
        public object PropertyChangedEvent { get; set; }
    }

更新:

我创建了一个控制台应用程序,以消除Web应用程序增加的复杂性,并且反序列化对于硬编码JSON字符串和从API检索的JSON都可以正常工作。这是否可以鼓励这可能是IIS配置问题呢?

丹26

因此,结果证明Web.config上发生了更改,将Newtonsoft版本从10更改为11,并且对于此……大的面部表情时刻没有引发任何错误将版本更改为11以与其他环境匹配可以解决此问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL查询可在SQL Server Management Studio中使用,但不适用于ASP.Net应用程序

来自分类Dev

使用 Newtonsoft 库在不同应用程序之间反序列化类型处理的 json

来自分类Dev

.Net - 程序集绑定不适用于 net461 中的 Newtonsoft

来自分类Dev

ReadJson和WriteJson与Divan couchdb一起使用,但不适用于Newtonsoft的Json.Net。

来自分类Dev

在C#中使用Newtonsoft Json.NET反序列化JSON

来自分类Dev

在C#中使用Newtonsoft Json.NET反序列化JSON

来自分类Dev

使用Fake来构建和测试ASP.NET 5 / MVC 6应用程序吗?

来自分类Dev

测试从ASP.NET MVC应用程序返回的HTTP标头

来自分类Dev

如何在ASP.NET MVC多层应用程序中正确进行单元测试?

来自分类Dev

Asp.Net Core MVC Web应用程序中的单元测试

来自分类Dev

如何在ASP.NET MVC多层应用程序中正确进行单元测试?

来自分类Dev

Newtonsoft JSON.NET反序列化错误

来自分类Dev

Newtonsoft json.net反序列化NullReferenceException

来自分类Dev

Newtonsoft json.net反序列化NullReferenceException

来自分类Dev

Newtonsoft Json.NET序列化的对象未在ASP.NET MVC视图中正确呈现

来自分类Dev

如何在执行Selenium Web驱动程序测试之前自动启动ASP.NET MVC Web应用程序?

来自分类Dev

在WPF应用程序中使用NewtonSoft进行序列化模型

来自分类Dev

将MVC应用程序部署到Azure后无法加载NewtonSoft.JSON

来自分类Dev

使用 ASP.net 核心 MVC 应用程序中的列表为 View() 创建单元测试

来自分类Dev

使用Newtonsoft Json.Net反序列化数组对象

来自分类Dev

Asp.net MVC实时应用程序性能

来自分类Dev

.NET WebForms应用程序会话信息不适用于MVC

来自分类Dev

ASP.NET 5 Web应用程序可与web.cmd一起使用,但不适用于IIS应用程序

来自分类Dev

为什么输出缓存不适用于我的ASP.NET MVC 4应用程序?

来自分类Dev

keycloak不适用于asp.net MVC5 Web应用程序(C#)

来自分类Dev

为什么输出缓存不适用于我的ASP.NET MVC 4应用程序?

来自分类Dev

异步不适用于大型ASP.NET应用程序,但适用于新应用程序

来自分类常见问题

单击按钮即可从ASP .NET MVC Web应用程序打开IOS应用程序

来自分类Dev

ASP.NET MVC 6应用程序的虚拟应用程序根路径

Related 相关文章

  1. 1

    SQL查询可在SQL Server Management Studio中使用,但不适用于ASP.Net应用程序

  2. 2

    使用 Newtonsoft 库在不同应用程序之间反序列化类型处理的 json

  3. 3

    .Net - 程序集绑定不适用于 net461 中的 Newtonsoft

  4. 4

    ReadJson和WriteJson与Divan couchdb一起使用,但不适用于Newtonsoft的Json.Net。

  5. 5

    在C#中使用Newtonsoft Json.NET反序列化JSON

  6. 6

    在C#中使用Newtonsoft Json.NET反序列化JSON

  7. 7

    使用Fake来构建和测试ASP.NET 5 / MVC 6应用程序吗?

  8. 8

    测试从ASP.NET MVC应用程序返回的HTTP标头

  9. 9

    如何在ASP.NET MVC多层应用程序中正确进行单元测试?

  10. 10

    Asp.Net Core MVC Web应用程序中的单元测试

  11. 11

    如何在ASP.NET MVC多层应用程序中正确进行单元测试?

  12. 12

    Newtonsoft JSON.NET反序列化错误

  13. 13

    Newtonsoft json.net反序列化NullReferenceException

  14. 14

    Newtonsoft json.net反序列化NullReferenceException

  15. 15

    Newtonsoft Json.NET序列化的对象未在ASP.NET MVC视图中正确呈现

  16. 16

    如何在执行Selenium Web驱动程序测试之前自动启动ASP.NET MVC Web应用程序?

  17. 17

    在WPF应用程序中使用NewtonSoft进行序列化模型

  18. 18

    将MVC应用程序部署到Azure后无法加载NewtonSoft.JSON

  19. 19

    使用 ASP.net 核心 MVC 应用程序中的列表为 View() 创建单元测试

  20. 20

    使用Newtonsoft Json.Net反序列化数组对象

  21. 21

    Asp.net MVC实时应用程序性能

  22. 22

    .NET WebForms应用程序会话信息不适用于MVC

  23. 23

    ASP.NET 5 Web应用程序可与web.cmd一起使用,但不适用于IIS应用程序

  24. 24

    为什么输出缓存不适用于我的ASP.NET MVC 4应用程序?

  25. 25

    keycloak不适用于asp.net MVC5 Web应用程序(C#)

  26. 26

    为什么输出缓存不适用于我的ASP.NET MVC 4应用程序?

  27. 27

    异步不适用于大型ASP.NET应用程序,但适用于新应用程序

  28. 28

    单击按钮即可从ASP .NET MVC Web应用程序打开IOS应用程序

  29. 29

    ASP.NET MVC 6应用程序的虚拟应用程序根路径

热门标签

归档