今天在處理一個接收API通過Post方式傳送Json數據的方法時,碰到接收的Json數據一直是空的問題。最好找了好久才解決,現在把需要的問題列出來。 1. 在一般處理程式中,需要設置 context.Request.InputStream.Position = 0; 剛開始設置了這個,但後面還是為空 ...
今天在處理一個接收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/