2016-09-09 3 views
1

В настоящее время я пытаюсь разработать простое угловое приложение js. Я пытаюсь отправить данные от клиента в веб-api. Тем не менее, я получаю ошибку 404, когда я отправляю запрос на отправку с углового приложения.

Ниже мой пост запрос,

$http.post('/api/LoadApi/', jsonData).then(function (result) { 
       console.log(result.data); 
      }) 
      .catch(function (error) { 
      }); 

где jsonData является действительными данными JSON.

Мой веб-апи код этого

public class LoadApiController : ApiController 
{ 
    [HttpPost] 
    public HttpResponseMessage LoadData(object dataToLoad) 
    { 
     var response = Request.CreateResponse(HttpStatusCode.Created); 

     return response; 
    } 
} 

Мой веб-апи маршрут конфигурации это,

config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{dataToLoad}" 
      ); 

Однако, когда я запускаю код, он выдает ошибку

Ошибка сервера в приложении «/». Ресурс не найден. Описание: HTTP 404. Ресурс, который вы ищете (или его зависимости), мог быть удален, изменилось его имя или временно недоступно. Просмотрите следующий URL-адрес и убедитесь, что оно написано правильно. Запрошенный URL:/API/LoadApi/

Можно ли указать, что проблема с приведенным выше кодом?

В нем говорится, что есть некоторая проблема с URL-адресом. Созданный url - http://localhost:14154/api/LoadApi/, который выглядит правильно.

+0

Ваш шаблон маршрута не может работать, поскольку он не определяет, какое действие на контроллере вы хотите сопоставить. – Claies

+0

также вы не используете 'POST' для отправки данных по строке URL. – Claies

ответ

1

Проблема связана с определением маршрута и тем, как вы пытаетесь отправить данные в свой метод контроллера. Я бы рекомендовал использовать маршрутизацию, основанную на атрибутах. В контроллере Web API это сделать:

[RoutePrefix("api/LoadApi")] 
public class LoadApiController : ApiController 
{ 
    [HttpPost] 
    [Route("loadData")] 
    public HttpResponseMessage LoadData(object dataToLoad) 
    { 
     var response = Request.CreateResponse(HttpStatusCode.Created); 
     return response; 
    } 
} 

Измените метод Application_Start() в Global.asax.cs к этому:

protected void Application_Start() 
{ 
    GlobalConfiguration.Configure(WebApiConfig.Register); 
} 

Убедитесь WebApiConfig.cs в App_Start имеет Register() метод, как это:

public static void Register(HttpConfiguration config) 
{ 
    config.MapHttpAttributeRoutes(); 
} 

И, наконец, измените свой $http.post, и звоните по этому адресу:

$http.post('/api/LoadApi/loadData', jsonData).then([...]); 
+0

Спасибо! Изменения сработали ... Я делал неправильную маршрутизацию ... –

Смежные вопросы