2015-11-19 14 views
6

Mam api interfejsu WWW, gdzie mam 2 metody, jedna bez parametru i dwie z różnymi typami parametrów (string i int). Podczas wywoływania metody string nie działa ... czego tu brakuje?wywołanie api sieci z parametrem ciągu znaków

public class MyControllerController : ApiController 
{ 
    public IHttpActionResult GetInt(int id) 
    { 
     return Ok(1); 
    } 

    public IHttpActionResult GetString(string test) 
    { 
     return Ok("it worked"); 
    } 
} 

WebApiConfig.cs:

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

    // Web API routes 
    config.MapHttpAttributeRoutes(); 

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

My Call:

/api/MyController/MyString //Doesnt work

/api/MyController/1 //work

mi się następujący błąd:

The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Http.IHttpActionResult GetInt(Int32)' in 'TestAngular.Controllers.MyControllerController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.

Czego mi brakuje w moją prośbę?

+2

Nie potrzebujemy ' Atrybut WebMethod' dla WebAPI –

+1

Nie można użyć tej samej trasy dla dwóch różnych punktów końcowych. Metoda GetInt wygrywa i będzie używać obu żądań. – PinBack

+0

Jak to zrobić? dodać {action} w routeTemplate? – MrProgram

Odpowiedz

7

trzeba zmienić URI

/api/MyController 

/api/MyController/string 

/api/MyController/1 

Nie trzeba określać metody.

Możesz zajrzeć do tego tutorial na asp.net w celu uzyskania dalszych wyjaśnień.

+0

I próbowałem wykonać ten samouczek i zastosować się do mojego projektu, ale nie dostałem pracy. Więc dlaczego pytam tutaj, musiałem coś przegapić – MrProgram

+0

@emptyman, więc próbowałeś nazwać te uri, a ty nie uzyskać jakąkolwiek odpowiedź? – Christos

+0

Mam int do pracy, ale w jaki sposób wysłać parametr ciąg? Nie można znaleźć metody (wygląda na int) – MrProgram

2

Minęło trochę czasu od kiedy pisał, ale myślę, że mam odpowiedź. Po pierwsze, istnieją dwie problemy. Po pierwsze, jak zauważył Pinback, nie można używać tej samej trasy dla dwóch różnych punktów końcowych.

Jeśli jednak po prostu wyeliminujesz metodę int, nadal będziesz napotykać problem. Pamiętaj: domyślna trasa wygląda następująco: api/{controller}/{id} Aby powiązać parametr, musi on być nazwany "id", a nie "test".

zmienić podpis do tego:

public IHttpActionResult GetString(string id) 

i będzie działać. (można również zmienić {id} na {test} w pliku webapiconfig.cs).

Powiązane problemy