2013-03-07 2 views
1

Недавно я добавил новый ApiController в мой проект ASP.NET MVC4 (у меня уже был один ApiController также в папке Controllers), называемый ServerInfoController. Я создал это с использованием шаблона CRUD; вот как это выглядит:ASP.NET Web API возвращает код 404 с недавно созданным ApiController

using System.Collections.Generic; 
using System.Net; 
using System.Net.Http; 
using System.Web.Http; 
using WebFrontend.Models; 

namespace WebFrontend.Controllers 
{ 
    public class ServerInfoController : ApiController 
    { 
     // GET api/serverinfo 
     public Dictionary<string, string> Get() 
     { 
      var settings = GlobalStaticVars.StaticCore.LoadServerSettings("Last", "Server"); 

      if (settings != null) 
      { 
       return new Dictionary<string, string> 
             { 
              {"ServerIP", settings.Address}, 
              {"ServerPort", settings.Port.ToString()} 

             }; 
      } 
      return new Dictionary<string, string> 
            { 
             {"ServerIP", ""}, 
             {"ServerPort", ""} 
            }; 
     } 
    } 
} 

Однако каждый раз, когда я пытаюсь перейти к этому ресурсу в браузере, я получаю 404 ошибку. Я знаю, что мои маршруты зарегистрированы правильно, так как мой другой контроллер по-прежнему доступен в конечной точке/api.

Ниже маршрут, который настраивается в WebApiConfig.cs (это маршрут по умолчанию):

public static void Register(HttpConfiguration config) 
     { 
      config.Routes.MapHttpRoute(
       name: "ActionApi", 
       routeTemplate: "api/{controller}/{action}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 
     } 
+0

Вы можете показать свои маршруты для веб-api? Также, какой URL вы вызываете. – gdp

+0

Готово. Я добавил его выше. Кроме того, URL-адрес, который я вызываю, будет похож на http: // localhost: 66555/api/serverinfo – wibarr

ответ

1

Вам не нужно {действие} часть маршрута. Это маршрутизация по умолчанию:

public static void Register(HttpConfiguration config) 
{ 
    config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
    ); 
} 
+1

Gotcha; благодаря! Я понял что-то подобное, установив часть действия в RouteParameter.Optional. – wibarr

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