2

認証してから、asp.netでWeb Apiを要求する必要があります。認証は正常に完了しています。しかし、特定の応答を生成するためにセッション値を新しい要求に渡すと、応答はController not foundエラーを返します。Asp.Net MVC アプリケーションに実装しようとしています。

メイン インデックスのコードは次のとおりです。

public async Task<ActionResult> Index()
    {
        var result = "";
        string json = " { \"username\": \"webservice\", \"password\": \"iIU2piH6wpBF92T\" }";
        var request = (HttpWebRequest)WebRequest.Create("https://os.mcparcel.com/osapi/user/login.json");

        request.Method = "POST";
        request.UserAgent = "MCParcel Plugin";
        request.ContentType = "application/json";

        using (var s = request.GetRequestStream())
        {
            using (var stw = new StreamWriter(s))
            {
                stw.Write(json);
            }
        }

        try
        {
            var response = (HttpWebResponse)request.GetResponse();
            var data = new StreamReader(response.GetResponseStream());
            result = data.ReadToEnd();//<-this gives the value for session id and name

            string key = "WucHEwRuy7trUDE7u3agEqEWrUkajuCr";
            string order_id = "MCParcel3";
            int labels_number = 1;


            var r = await Test(key, order_id, labels_number, result);
        }
        catch (WebException ex)
        {
            var errorData = new StreamReader(ex.Response.GetResponseStream());
            var errorString = errorData.ReadToEnd();

        }

        return View();

    }

同じコントローラー内の他の関数は次のとおりです。エラーは次のとおりです。

var 応答

 public static async Task<string> Test(string key, string order_id, int labels_number, dynamic results, int? shipment_id = 0)
    {
        var r = await GetShippingOptionRequest(key, order_id, labels_number, results);
        Console.WriteLine(r);
        return r;
    }


  public static async Task<string> GetShippingOptionRequest(string key, string order_id, int labels_number, dynamic results, int? shipment_id = 0)
    {
        string json = " { \"key\": \"" + key + "\", \"order_id\": \"" + order_id + "\", \"labels_no\": " + labels_number + ", \"shipment_id\": " + shipment_id + "";


        var dynObj = JsonConvert.DeserializeObject<LoginResponse>(results);

        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Method", "POST");
            client.DefaultRequestHeaders.Add("ContentType", "application/json");
            client.DefaultRequestHeaders.Add("UserAgent", "MCParcel Plugin");

            client.DefaultRequestHeaders.Add("sessid", dynObj.sessid);
            client.DefaultRequestHeaders.Add("session_name", dynObj.session_name);

            client.DefaultRequestHeaders.Add("key", key);
            client.DefaultRequestHeaders.Add("order_id", order_id);
            client.DefaultRequestHeaders.Add("labels_number", Convert.ToString(labels_number));
            client.DefaultRequestHeaders.Add("shipment_id", Convert.ToString(shipment_id));


            //the code below is the required response that is not returning values and returning 404 error
            var response = await client.GetStringAsync("https://os.mcparcel.com/osapi/service_os_api/get_label_info.json");
            return response;
        }
    }

応答は、次のようなものを返す必要があります。

{ "source_labels": [" https://os.mcparcel.com/sites/os.mcparcel.com/files/sourcepdflabels/labels_8c1e3033a8d23c632006639f39ef6964.pdf "], "トラック": [" https://os.mcparcel.com /track_and_trace/(J)JD0000900581338100135004 "], "labels_file": " https://os.mcparcel.com/sites/os.mcparcel.com/files/pdf_labels/70994c37ad2a99d4047e0684c3e05c1f.pdf " }

どんな助けでも大歓迎です。前もって感謝します!!!

4

1 に答える 1

1

他のコントローラーを叩くことができますか?はいの場合は、別のコントローラーを作成して、単純な json リクエストで現在のコードを移動し始め、それを複雑な json リクエストに構築してみてください。または、それはあなたのルーティングかもしれません。

いいえの場合は、セットアップしていない可能性がありますconfig.MapHttpAttributeRoutes()

于 2016-06-28T14:41:01.470 に答える