2016-07-24 16 views
0

hier ist der Start ruinning Controller-Methode in Web-Anwendung:web api Methode kann nicht von Web-Anwendung

public ActionResult PaginationOfBooks(string _title, string _author, string _description, string _publisher) 
     { 

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

      HttpResponseMessage response = client.GetAsync("api/Book/GetBooks").Result; 

Rest noch nicht wichtig. Eigentlich an diesem Punkt im Debug-Modus Ich erwarte, dass WebAPI Projekt wechseln, die in derselben Lösung mit Web-Anwendung, GetBooks Methode I Bruchstelle auf dem ersten Zeile dieser Methode hat .. hier ist der Inhalt des Ergebnisses:

StatusCode: 404, ReasonPhrase: 'Not Found', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: 

mein Web-abi-Projekt:

public ActionResult GetBooks(string _title, string _author, string _description, string _publisher) 
     { 
      var draw = 1; 
... 

WebAPI config:

public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 
      // Web API configuration and services 

      // Web API routes 
      config.MapHttpAttributeRoutes(); 

      config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/Book/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 

      config.Formatters.Remove(config.Formatters.XmlFormatter); 
      config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json")); 
     } 
    } 

wie kann ich diese Web-api Anfrage bekommen?

Ich betreibe api Projekt und einfach versucht Methode mit diesem zuzugreifen: enter image description here

+0

Mögliches Duplikat von [Attributrouting mit optionalen Parametern in der ASP.NET-Web-API] (http://StackOverflow.com/questions/22388452/Attribute-routing-with-optional-parameters-in-asp-net-web- api) – Eris

Antwort

2

eine Route Attribut hinzufügen, bevor die api Methode

[Route("api/Book/GetBooks/{_title}/{_author}/{_description}/{_publisher}")] 
public ActionResult GetBooks(string _title, string _author, string _description, string _publisher) 
     { 
      var draw = 1; 
... 

dann nennen es als

public ActionResult PaginationOfBooks(string _title, string _author, string _description, string _publisher) 
     { 

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

      HttpResponseMessage response = client.GetAsync("api/Book/GetBooks/" + _title + "/" + _author + "/" + _description + "/" + _publisher).Result; 
+0

ty für post aber immer noch gleich .. – TyForHelpDude

+0

es ist für GET nicht für POST, Sie verwendet bekommen, so zeige ich bekommen – Mostafiz

+0

ja ich kann auf API-Methode mit "localhost: 57752/api/Book/GetBooks/title .. . "aus dem Browser, aber ich brauche Zugriff darauf innerhalb der Anwendung – TyForHelpDude

1

ändern Ihre WebApiConfig wie diese-

config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
    ); 

    config.Routes.MapHttpRoute(
     name: "BooksApi", 
     routeTemplate: "api/{controller}/{email}/{firstname}/{lastname}/{source}" 
    ); 

Und Anruf von PaginationOfBooks wie this-

HttpResponseMessage response = client.GetAsync("api/Book/GetBooks/" + _title + "/" + _author + "/" + _description + "/" + _publisher).Result; 

sehen, ob das hilft.

Verwandte Themen