今天在處理一個接收API通過Post方式傳送Json資料的方法時,碰到接收的Json資料一直是空的問題,最好找了好久才解決,現在把需要的問題列出來,
1. 在一般處理程式中,需要設定 context.Request.InputStream.Position = 0; 剛開始設定了這個,但后面還是為空,原因是每二點,
2.在web.config檔案,sessionState 要去掉 cookieless="AutoDetect" ,否則就算設定了第一點也還是會為空, 按下面的格式去寫
<sessionState mode="InProc" cookieless="false" timeout="20" />
=========================================================
參考的IHttpHandler源代碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Web;
using System.Text;
using System.Web.Script.Serialization;
// 接收 API 通過 Post 方式傳送 Json格式的資料
public class GetIPN : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/json";
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
string jsonText = string.Empty;
context.Request.InputStream.Position = 0; //這一句很重要,不然一直是空
StreamReader sr = new StreamReader(context.Request.InputStream);
jsonText = sr.ReadToEnd();
// IPNinfo model = (new JavaScriptSerializer()).Deserialize<IPNinfo >(jsonText); //轉化成物體物件
//然后去處理業務
context.Response.ContentType = "text/plain";
context.Response.Write("OK"); //API回呼回應,如需要回傳OK
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
工具Json轉化為物體類:
https://www.bejson.com/convert/json2csharp/
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/500483.html
標籤:ASP.NET
