2016-06-28 6 views
2

Ich muss authentifizieren und dann eine Web Api in asp.net anfordern. Die Authentifizierung ist ordnungsgemäß abgeschlossen. Aber wenn ich die Sitzungswerte an eine neue Anforderung übergebe, um eine bestimmte Antwort zu generieren, gibt die Antwort einen Fehler Controller nicht gefunden zurück. Ich versuche, es in Asp.Net MVC-Anwendung zu implementieren.Antwort von HttpClient in Asp.Net zurück 404 (nicht gefunden: Konnte den Controller nicht finden)

Hier ist der Code für den Hauptindex ist:

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(); 

    } 

Hier werden die anderen Funktionen innerhalb der gleichen Steuerung sind, der Fehler ist in:

var Reaktion

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; 
     } 
    } 

Die Antwort sollte etwas ähnliche Rückkehr zu folgenden:

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

Jede Hilfe wird sehr geschätzt. Danke im Voraus!!!

+0

Sind Sie sicher, dass Sie eine korrekte URL verwenden? –

+0

Ich bin mir ziemlich sicher. @DanielStackenland –

+1

Warum sollten Sie Ihre echten Referenzen der Welt aussetzen? – haim770

Antwort

1

Können Sie andere Controller schlagen? Wenn ja, dann könnten Sie versuchen, einen anderen Controller zu erstellen und Ihren aktuellen Code mit einer einfachen JSON-Anfrage zu verschieben und ihn für eine komplexe JSON-Anfrage zu erstellen. Oder es könnte auch Ihr Routing sein.

Wenn nein, dann ist es möglich, dass Sie config.MapHttpAttributeRoutes() nicht eingerichtet haben.

+0

Ich habe 'config.MapHttpAttributeRoutes()' bereits eingerichtet und bin in der Lage, andere Controller zu treffen. Wie baut man sich komplexe JSON-Anfragen auf? –

+0

Können Sie den Controller oder die API mit einem REST-Client wie Postman erreichen? Wenn nicht, ist Ihre URL nicht korrekt und hat nichts mit Ihrem Client-Code zu tun. – alltej

+0

Nun, ich habe das Problem gefunden und es gelöst. Es hat mit Keksen zu tun. Ich habe die httpclient-Methoden mit den Webrequest-Methoden entfernt, die Cookies enthalten und somit das Problem gelöst haben !! @Allan danke für deine Besorgnis! –