2017-09-22 3 views
-3

Muss eine Web-API konsumieren. Der Controller sieht so aus:Verbrauchen ASP.NET WebAPI

using System; 
using System.Collections.Generic; 
using System.Web.Http; 
using ERPService.Api.Models; 
using ERPService.Core.Services; 

namespace ERPService.Api.Controllers 
{ 

    [RoutePrefix("api/local")] 
    public class LocalProductController : BaseApiController 
    { 
     [Route("product/{productId}/export")] 
     public ApiResponse<IList<ServiceResponse<object>>> ExportProduct(int productId) 
     { 
      return Response(this.ServiceFactory.ProductService.ExportProduct(productId)); 
     } 

    } 
} 

Mit HttpClient, wie kann ich diese ExportProduct Funktion aufrufen? habe ich eine Konsolenanwendung diese zu konsumieren:

HttpClient client = new HttpClient(); 
client.BaseAddress = new Uri("http://localhost:49319/"); 
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

HttpResponseMessage response = client.GetAsync("api/local/product/{productId}/export").Result; 

Das Ergebnis ist ein Fehler, wie folgend:

Fehlercode - MethodNotAllowed

Nachricht - Methode nicht

erlaubt
+2

[so] ist * nicht * ein kostenloser Code-Schreibdienst. Von Ihnen wird erwartet, dass Sie ** den Code selbst schreiben **. Nach [mehr Forschung] (http://meta.stackoverflow.com/questions/261592), wenn Sie ein Problem haben, können Sie ** posten, was Sie versucht haben ** mit einer ** klaren Erklärung, was nicht funktioniert ** und Bereitstellung eines ** [MCVE] **. Ich schlage vor, eine gute Frage und die perfekte Frage zu lesen (http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/). Nimm auch die [Tour]. – Igor

+0

Mit dem HttpClient laden Sie die mit der Methode verknüpfte Route. Was hast du probiert? – squillman

+0

versuchen Sie es wie folgt: HttpClient client = new HttpClient(); client.BaseAddress = new Uri ("http: // localhost: 49319 /"); client.DefaultRequestHeaders.Accept.Add (neuer MediaTypeWithQualityHeaderValue ("application/json")); HttpResponseMessage Antwort = client.GetAsync ("api/local/Produkt/{productId}/Export"). Ergebnis; Es ist für mich klar, dass ich Get nicht verwenden kann, aber was soll ich verwenden? – BenjiK

Antwort

0
string json; 
     WebRequest req = HttpWebRequest.Create(url); 
     req.Method = "GET"; 
     using (HttpWebResponse response = (HttpWebResponse)req.GetResponse()) 
     { 
      using (Stream responseStream = response.GetResponseStream()) 
      { 
       using (StreamReader responseReader = new StreamReader(responseStream)) 
       { 

        json = responseReader.ReadToEnd(); 

       } 
      } 
     } 
0

gefunden Die Lösung für das Problem: musste das [HttpGet] -Attribut hinzufügen, so sollte es so aussehen:

[Route("product/{productId}/export")] 
[HttpGet] 
public ApiResponse<IList<ServiceResponse<object>>> ExportProduct(int productId) 
{ 
    return Response(this.ServiceFactory.ProductService.ExportProduct(productId)); 
}