У меня есть веб-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; }
}
Вы не можете перегрузить действие на контроллер по параметру. Вы можете указать, какое действие вы хотите выполнить по имени, используя атрибут RouteAttribute, или вы можете указать его с помощью глагола Http (Get, Post, Put и т. Д.). – Igor
Каждое действие на контроллере имеет на нем свое имя. Разница в том, что была выше, была бы символом «2» в конце. – Nate
Это не имеет значения, потому что ваш шаблон шаблона полностью игнорирует имя (т. Е. Нет {action}), и нет атрибутов RouteAttributes и без них он будет отключаться от используемого http-глагола. – Igor