2015-05-19 15 views
5

Vorrei passare un parametro di un sito web a un webapi, ma non funziona.Passa il parametro long a asp.net webapi

Webapiconfig: controller di api

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

Web: prendere il parametro e restituire il htmlsnapshot dell'altro sito

[HttpGet] 
    [Route("api/snapshot/{param}")] 
    public string GetSnapShot(string param) 
    { 

     string fragment = param; 
     string content = ""; 

     if (fragment != null) 
     { 
      int firstSlash = fragment.IndexOf("/"); 
      if (firstSlash <= 2) 
       fragment = fragment.Substring(firstSlash + 1, fragment.Length - firstSlash - 1); 
      using (IWebDriver driver = new PhantomJSDriver()) 
      { 
       string url = String.Format("http://domain.com/{0}", fragment); 
       driver.Navigate().GoToUrl(url); 

       content = driver.PageSource; 
      } 
     } 
     return content; 
    } 

se provo api/snapshot/du-lieu -> colpito il controllore bene, ma se mi passa in un più complesso come

api/snapshot /% 2Fdu-lieu% 2Fbong-da-y-Serie-a% 2Fseason% 2F1% 2Ftong-quan -> non riesce a lavorare, tornare 404

Si prega di avvisare.

risposta

1

Perché non inserisci il parametro nella stringa di query ?? il codice diventerà

[HttpGet] 
[Route("api/snapshot")] 
public string GetSnapShot(string param1,string param2,string param3) 
{ 
} 

E da dove ti chiamare l'API, creare la richiesta URL http://<whatever domain you use>/api/snapshot?param1=valueparam1&param2=valueparam2&param3=valueparam3

+0

No, lo voglio solo un parametro univoco in quanto gli altri siti passeranno in parametri dinamici, la mia webapi restituisce l'htmlsnapshot. Ho aggiornato il mio codice in pieno sopra. –

+0

c'è qualche messaggio di errore o qualcosa che definisce "non funziona"? –

+0

restituisce errore 404. Grazie –

0
[HttpGet] 
     [Route("api/snapshot/{*param}")] 
     public string GetSnapShot(string param) 
{ 

} 

Funziona ora, ringrazia tutti.