2017-01-05 4 views
0

У меня возникла сложная ситуация, когда у меня есть приложение angular2, которое отлично развертывается на сервере, но при обращении к серверу WebApi я получаю 404 ошибки в ответе. Устройства WebApi работают нормально в локальной среде, но на реальном сервере он терпит неудачу.Ошибка 404 при вызове WebApi

<!--Redirect selected traffic to index --> 
    <rule name="Index Rule" stopProcessing="true"> 
     <match url=".*" /> 
     <conditions logicalGrouping="MatchAll"> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
     <add input="{REQUEST_URI}" matchType="Pattern" pattern="/api/" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="/index.html" /> 
    </rule> 

Выше правило, которое я поместил в файле Web.config, где сервер WebAPI будет вызван только, если есть «/ API /» в URL. У меня есть анонимное действие в контроллере, которое я ожидал бы вызывать при работе через почтальон, но я просто получаю ошибку 404 в ответ.

[AllowAnonymous] 
    [HttpGet] 
    [Route("api/dashboard/getanon")] 
    public IHttpActionResult GetTaskItemsAnon() 
    { 
     var identity = (ClaimsIdentity)User.Identity; 
     return this.Content(HttpStatusCode.OK, new { response = "Hello: Anon" }); 
    } 

Веб-камера размещается под субдоменом внутри сети. Все файлы с угловым2 загружены правильно. Я показываю экран входа, но не могу установить связь с контроллерами WebApi. Любая помощь будет оценена thanx.

ОБНОВЛЕНИЕ: Ниже в файл 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 } 
     ); 
    } 
+1

Вы можете разместить снимок Почтальон как вы делаете вызов API? Кроме того, можете ли вы попробовать удалить атрибут [AllowAnonymous] из своего метода действий и попробовать? –

+0

Я удалил [AllowAnonymous], и ничего не изменилось. С Postman я просто использую обычный GET-запрос без параметров для соответствующего URL-адреса. Я знаю, что это правильно в Postman, потому что в среде localhost Postman успешно достигает действия WebApi в контроллере. – Rossco

+0

Можете ли вы опубликовать код в своем RouteConfig.cs? –

ответ

0

WebAPI имеет некоторые правила, чтобы соответствовать методам контроллера (имя, параметр) с помощью входящих запросов. Я думаю, здесь WebApi может ожидать параметр для получения записи по ID. Вы используете GET, который неявно нуждается в «id» для получения записей.

Для целей тестирования, попробуйте

1) использовать параметр в методе. общественного IHttpActionResult GetTaskItemsAnon (интермедиат ID = 1)

2) удалить директиву [HttpGet] для вашего метода и заботиться не существует никаких конфликтов с другими методами в классе контроллера