2012-10-11 3 views
7

Mam kontroler o nazwie LoginController z metody GET z podpisem:MVC4 Web interfejs API Reszta z wielu parametrów

public string Get(string Key, string Code, string UserID, string Password) 

Chcę być w stanie wywołać ją z wywołania podobnego do:

http://localhost:1234/api/Login/KeyValue/CodeValue/UserValue/PasswordValue 

Nie mogę tego zrobić. Jeśli zadzwonię pod numer:

http://localhost:1234/api/Login?Key=KeyValue&Code=CodeValueUserID=UserValue&Password=PasswordValue 

Połączenie zostanie wykonane.

Próbowałem dodawania tras, takie jak poniżej, aby Global.asax

routes.MapHttpRoute(name: "Login", routeTemplate: "api/{controller}/{action}/{Key}/{Code}/{UserID}/{Password}", 
       defaults: new { Key = UrlParameter.Optional, Code = UrlParameter.Optional, UserID = UrlParameter.Optional, Password = UrlParameter.Optional }); 

lub

routes.MapHttpRoute(name: "Login", routeTemplate: "api/{controller}/{Key}/{Code}/{UserID}/{Password}", 
       defaults: new { Key = UrlParameter.Optional, Code = UrlParameter.Optional, UserID = UrlParameter.Optional, Password = UrlParameter.Optional }); 

te nie wydają się działać. Gdzie się mylę, czy jest to możliwe? Udało mi się to zrobić w wersji RC WebApi z MVC3.

Odpowiedz

10

Wygląda na to, że brakuje działania w zgłoszeniu (/api/Login/KeyValue/CodeValue/UserValue/PasswordValue). Zamiast tego spróbuj /api/Login/Get/KeyValue/CodeValue/UserValue/PasswordValue, jeśli zamierzasz korzystać z pierwszej trasy.

Jeśli chcesz, aby móc nazwać to bez określonego działania i domyślnie do „Get”, trzeba określić domyślne działanie:

defaults: new { Key = UrlParameter.Optional, Code = UrlParameter.Optional, UserID = UrlParameter.Optional, Password = UrlParameter.Optional, Action = "Get" } 

Mam powodzeniem próbował tego w ASP.NET MVC 4 projektu (Visual Studio 2012 RC):

Tworzenie LoginController z działania:

public string Get(string Key, string Code, string UserID, string Password) 
{ 
    return Key + Code + UserID + Password; 
} 

I wyznaczenie trasy w Global.asax.cs:

RouteTable.Routes.MapHttpRoute(null, "api/{controller}/{Key}/{Code}/{UserID}/{Password}", 
      new { Key = UrlParameter.Optional, Code = UrlParameter.Optional, UserID = UrlParameter.Optional, Password = UrlParameter.Optional, Action = "Get"}); 

Jeśli to nie działa, być może inna trasa odbiera żądanie lub trasa nie jest rejestrowana.

+0

jestem w porozumieniu, muszę wystawiać API osobie trzeciej więc format jest poza moją kontrolą. Próbowałem tego, co sugerowałeś, ale żadne podejście nie działa (dodawanie GET lub określanie domyślnej akcji). Próbowałem również dodać [HttpGet] do etykiety kontrolera. – keitn

+0

Masz rację. Pomyłkowo dodałem metodę RegisterRoutes do Global.asax (jak w MVC3), kiedy dodałem ją do RouteConfig.cs wszystko działa dobrze. Dzięki. – keitn