2

Ich versuche, auf den folgenden Web-API zu schreiben:ASP.NET Web API Wegcontroller nicht gefunden

http://localhost:8543/api/login/authenticate 

LoginApi (Web API) definiert ist unter:

[RoutePrefix("login")] 
public class LoginApi : ApiController 
{ 
    [HttpPost] 
    [Route("authenticate")] 
    public string Authenticate(LoginViewModel loginViewModel) 
    { 
     return "Hello World"; 
    } 
} 

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 } 
    ); 
} 

Hier ist der Fehler Ich bekomme:

Request URL:http://localhost:8543/api/login/authenticate 
Request Method:POST 
Status Code:404 Not Found 
Remote Address:[::1]:8543 
+0

Was Sie bekommen Sie zu ändern, wenn Sie gehen, um http: // localhost: 8543/login/authentifizieren (no/api)? –

Antwort

-1

Hinweis Sie beide Attribute verwenden Routing auf dem Controller/Aktion und Kongress Routing mit config.Routes.MapHttpRoute.

config.Routes.MapHttpRoute wird die Routen gemäß Ihrer Definition "api/{controller}/{id}" zuordnen.

Beim Attribut-Routing werden die Routen basierend auf der von Ihnen definierten Route zugeordnet: /login/authenticate.

Da Sie sowohl das Attribut-Routing als auch das Convention-Routing verwenden, nimmt das Attribut-Routing eine hohe Priorität ein. Ich würde bei der Verwendung des einen oder anderen bleiben. Wenn beides vorhanden ist, wird ein wenig Verwirrung darüber verursacht, welche Route für den Zugriff auf eine Aktionsmethode verwendet wird.

+0

Dies beantwortet die Frage nicht. – mason

3

Sie sind login als Ihre Route Präfix auf dem Controller so versuchen

http://localhost:8543/api/login/authenticate 
zu nennen

nicht als dieser Code

[RoutePrefix("login")] 
public class LoginApi : ApiController 
{ 
    //eg:POST login/authenticate. 
    [HttpPost] 
    [Route("authenticate")] 
    public string Authenticate(LoginViewModel loginViewModel) 
    { 
     return "Hello World"; 
    } 
} 

nur für funktioniert

0 gefunden werden
http://localhost:8543/login/authenticate 

Sie benötigen eine Route Präfix

[RoutePrefix("api/login")] 
public class LoginApi : ApiController 
{ 
    //eg:POST api/login/authenticate. 
    [HttpPost] 
    [Route("authenticate")] 
    public string Authenticate(LoginViewModel loginViewModel) 
    { 
     return "Hello World"; 
    } 
}