Priyank_Mittal Ответов: 2

Маршрутизация атрибутов не работает с двумя или более контроллерами


Я использовал атрибут routing и установил RoutePrefix () в качестве маршрута по умолчанию FirstController. Затем я создал новый контроллер и дал ему маршрут по умолчанию.

Система времени компиляции.ArgumentException генерируется на "GlobalConfiguration.Настройка (WebApiConfig.Register); "в Global. asax отображается сообщение:" сегмент пути не может содержать два последовательных параметра. Они должны быть разделены или строковый литерал."

Это FirstController. cs
[System.Web.Http.RoutePrefix("api/First")]
public class FirstController : ApiController
{
    [System.Web.Http.HttpGet]
    [System.Web.Http.Route("Method1")]
    public int Method1(string Param1, string Param2)
    {
      //
    }
    [System.Web.Http.HttpGet]
    [System.Web.Http.Route("Method2")]
    public int Method2(string Param1, string Param2)
    {
      //
    }
}

Это SecondController. cs
[System.Web.Http.RoutePrefix("api/Second")]
     public class SecondController : ApiController
     {
         [System.Web.Http.HttpGet]
         [System.Web.Http.Route("Method3")]
         public int Method3(string Param1, string Param2)
         {
           //
         }
         [System.Web.Http.HttpGet]
         [System.Web.Http.Route("Method4")]
         public int Method4(string Param1, string Param2)
         {
           //
         }
     }

И это моя глобальная.эйсакс (возвращение данных в формате JSON)
protected void Application_Start()
        {
            GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
            GlobalConfiguration.Configuration.Formatters.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter);
            GlobalConfiguration.Configure(WebApiConfig.Register);
        }

Я пытаюсь создать несколько контроллеров, имеющих свои собственные маршруты по умолчанию. Пожалуйста помочь.

Что я уже пробовал:

Я искал решения, но у них нет конкретного ответа на эту проблему.
Я нашел в ответе, что " как это веб-API не поддерживает несколько идентичных атрибутивных маршрутов на разных контроллерах. Вы получите 404, потому что все маршруты совпадают более чем с одним контроллером, и в этот момент Web API будет считать результат неоднозначным. Обратите внимание, что MVC 6 не имеет этого ограничения (но на данный момент это еще не RTM).

Однако если вы используете Web API 2.11 (или новее), вы можете создать ограничение маршрута для метода http для каждого контроллера и использовать его вместо встроенного атрибута маршрута."

2 Ответов

Рейтинг:
0

Priyank_Mittal

Показанное сообщение об ошибке обычно связано с шаблоном маршрута, таким как

Route("{Param1}{Param2}/{Param3})

где нет ничего, разделяющего два последовательных параметра, как между {Param1}{Param2} в приведенном выше примере. Фреймворк не сможет использовать такие шаблоны для сопоставления маршрутов, поскольку он не сможет определить, какие параметры сопоставлять с действиями независимо от имени параметра.

Проверьте свои шаблоны маршрутов на наличие опечаток, так как сделать такую ошибку очень легко.

Попробуйте найти }{ в вашем коде, если вы не можете легко идентифицировать его с первого взгляда.


Рейтинг:
0

RebelStar

Добавьте шаблон маршрута mvc в файл startup. cs
Видеть это


Priyank_Mittal

Забота оценена по достоинству! Но в моем проекте нет файла startup. cs.

RebelStar

тогда в любом положении (файл/структура/фреймворк/версия) вам нужно просто добавить шаблон для маршрутизации с помощью поиска в интернете.