2016-12-20 2 views
1

У меня есть веб-API на сайте. Если в api-вызове нет параметра, я могу ударить его, но если у него есть параметр, я не могу его ударить. Ниже приведен пример того, о чем я говорю.Параметр публикации проблемы в MVC API

[HttpGet] 
public string GetFacilityName2() 
{ 
    return "Good"; 
} 

[HttpGet] 
public string GetFacilityName(string projectNumber) 
{ 
    return "Never Get Here"; 
} 

Мой конфигурационный маршрут по умолчанию используется в настоящее время.

config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 

Я использую следующие два URL-адреса. Url тот, который работает так http://localhost/api/Controller/GetFacilityName2

Url тот, который не работает в http://localhost/api/Controller/GetFacilityName?projectNumber=44

UPDATE У меня был третий метод на API, который был этим.

[HttpGet] 
public Address GetWorkplaceAddress(string projectNumber) 
{ 
    return new Address(); 
} 

Когда я удалил это из API, другой метод начал работать. Адрес определяется как таковой.

public class Address 
{ 
    public int Id { get; set; } 
    public string AddressValue { get; set; } 
    public string City { get; set; } 
    public int? State { get; set; } 
    public string Zip { get; set; } 
    public int? Country { get; set; } 
} 
+0

Вы не можете перегрузить действие на контроллер по параметру. Вы можете указать, какое действие вы хотите выполнить по имени, используя атрибут RouteAttribute, или вы можете указать его с помощью глагола Http (Get, Post, Put и т. Д.). – Igor

+0

Каждое действие на контроллере имеет на нем свое имя. Разница в том, что была выше, была бы символом «2» в конце. – Nate

+0

Это не имеет значения, потому что ваш шаблон шаблона полностью игнорирует имя (т. Е. Нет {action}), и нет атрибутов RouteAttributes и без них он будет отключаться от используемого http-глагола. – Igor

ответ

2

Вы не можете перегрузить какое-либо действие на контроллер по параметру, который соответствует вашему коду.

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

  • шаблон RouteAttribute
  • о маршруте routeTemplate: "api/{controller}/{action}/{id}",

ИЛИ вы можете указать его глаголом Http (Get , Post, Put и т. Д.), Что и делается в настоящее время.

+1

Это сработало. Я полностью это просмотрел. Спасибо – Nate

+0

@Nate - Рад, что это сработало для вас. Пожалуйста, подумайте о том, чтобы принять его в качестве ответа (см. [Как принять ответы SO] (http://meta.stackexchange.com/a/5235)), как только истечет срок в 15 минут. – Igor

+0

У меня все еще есть 3 минуты, прежде чем система позволит мне принять его в качестве ответа. – Nate

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