iT邦幫忙

0

有誰知道 在 C# MVC Controller 做 JSON POST 並且導向 (求教)

有誰知道 在 C# MVC Controller 做 JSON POST 並且導向 (預設是不行)
NUGET 套件也行

對下面這個網址 POST 下面 JSON 字串

http://localhost:9300/bi/v1/login

{"parameters":[{"name":"h_CAM_action","value":"logonAs"},{"name":"CAMNamespace","value":"JDBCAuth"},{"name":"CAMUsername","value":"ABCD"},{"name":"CAMPassword","value":"ABCD"}]}

看更多先前的討論...收起先前的討論...
powerc iT邦新手 1 級 ‧ 2021-03-05 09:16:23 檢舉
JSON, not JASON. 回歸正題,你是要導向什麼? 至少把controller或js端秀出來
OK FIX
石頭 iT邦高手 1 級 ‧ 2021-03-05 09:38:25 檢舉
ㄜ..... localhost 只有在local才可以請求
沒有給我們程式碼和更多描述
無法幫助你
https://www.codeproject.com/articles/833007/redirect-and-post-in-asp-net-mvc
類似做這個 只是 他POST資料是 Dictionary 不符合我要的
想說直接 POST JSON 就可以了
http://localhost:9300/bi/v1/login  這個你想像成一個可收POST的服務就好了 這個不是我的程式 
public class YourController: Controller
{
public ActionResult YourAction()
{
// 下面這個 Dictionary  要改成 JSON  不限定使用啥套件
Dictionary<string, object> postData = new Dictionary<string, object>();
postData.Add("first", "someValueOne");
postData.Add("second", "someValueTwo");

return this.RedirectAndPost("http://localhost:9300/bi/v1/login", postData);
//Or return new RedirectAndPostActionResult("http://TheUrlToPostDataTo", postData);
}
}
powerc iT邦新手 1 級 ‧ 2021-03-05 13:51:16 檢舉
那篇文章提到的"Fluentx.Mvc" 函式庫,你有裝嗎?
他的RedirectAndPost只有提供dictionary型態?
我不確定你是要手刻跟這個類似的功能,還是說他的這個套件不支援string
NUGET 裝了  
但這個 RedirectAndPost("http://localhost:9300/bi/v1/login", postData);
只吃 dictionary 兜 不出我要的 {"parameters":[{"name":"h_CAM_action","value":"logonAs"},{"name":"CAMNamespace","value":"JDBCAuth"},{"name":"CAMUsername","value":"ABCD"},{"name":"CAMPassword","value":"ABCD"}]}
把這JSON 反序列化 會來兩個物件 所以根本不是 dictionary
https://codebeautify.org/json-deserialize-online
所以還不如直接丟 JSON 省得麻煩
Homura iT邦高手 1 級 ‧ 2021-03-05 15:21:36 檢舉
說個有點離題的
不能用httpRequst丟完再導向嗎?
一定要用這個?XD
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
japhenchen
iT邦超人 1 級 ‧ 2021-03-05 16:40:26
最佳解答

MVC一樣適用,我用的是nuget下載的newtonsoft.json

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;

namespace MVC_A
{
    class Program
    {
        static void Main(string[] args)
        {
            myobjclass myObj = new myobjclass(new List<parameter>{
                new parameter("h_CAM_action", "logonAs"),
                new parameter("CAMNamespace", "JDBCAuth"),
                new parameter("CAMUsername", "ABCD"),
                new parameter("CAMPassword", "ABCD"),
            });
            Console.WriteLine(JsonConvert.SerializeObject(myObj));
            Console.ReadKey();// 等你按任一鍵
            POST(new Uri("https://test.abcd.com/a.php"),myObj);
        }

        private static void POST(Uri servSite, myobjclass myObj)
        {
            using (WebClient wc = new WebClient())
            {
                try
                {
                    wc.Encoding = Encoding.UTF8;
                    var res = wc.UploadString(servSite,JsonConvert.SerializeObject(myObj) );
                    Console.WriteLine(res);
                }
                catch (WebException ex)
                {
                    throw new Exception("無法連接遠端伺服器");
                }
            }
        }
    }
    class myobjclass
    {
        public List<parameter> parameters { get; set; }
        public myobjclass(List<parameter> initValue)
        {
            parameters = new List<parameter>();
            if (initValue.Any())
                parameters.AddRange(initValue);
        }
    }
    class parameter
    {
        public string name { get; set; }
        public string value { get; set; }
        public parameter(string _name, string _value)
        {
            name = _name;
            value = _value;
        }
    }
}

consoke.writeline出來的結果

{"parameters":[{"name":"h_CAM_action","value":"logonAs"},{"name":"CAMNamespace","value":"JDBCAuth"},{"name":"CAMUsername","value":"ABCD"},{"name":"CAMPassword","value":"ABCD"}]}

我要發表回答

立即登入回答