2

Я пытаюсь отправить к следующей Web API:API контроллер ASP.NET Web Маршрут не найден

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

LoginApi (Web API) определяются следующим образом:

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

Произошла ошибка: Я получаю:

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

Что вы получаете, когда вы идете к HTTP: // локальный: 8543/Логин/аутентификации (нет/апи)? –

ответ

-1

Уведомление используется как атрибут маршрутизации на контроллер/действие и конвенции о маршрутизации с config.Routes.MapHttpRoute.

config.Routes.MapHttpRoute будет отображать маршруты согласно вашему определению «api/{controller}/{id}».

Хотя маршрутизация атрибутов будет отображать маршруты в зависимости от того, как вы их определили: /login/authenticate.

Кроме того, поскольку вы используете маршрутизацию атрибутов и маршрутизацию конвенций, маршрутизация атрибутов требует предварительной оценки. Я буду придерживаться того или другого. Имея оба добавляет немного путаницы в отношении того, какой маршрут будет использоваться для доступа к методу действий.

+0

Это не отвечает на вопрос. – mason

3

Вы используете login в качестве маршрута приставкой на контроллере так пытается вызвать

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

не будет найден, как этот код

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

будет работать только для

http://localhost:8543/login/authenticate 

Вы должны изменить префикс маршрута к

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